Article:
Biên dịch Ruby 1.9 và ruby-opengl trên Windows
1781
ngocdaothanh.myopenid.com 172Updated over 2 years ago |
Trong các hệ điều hành, Windows thường dễ sử dụng nhất nếu chương trình đã được biên dịch sẵn cứ thế mà chạy. Nhưng ngược lại, nếu phải tự biên dịch chương trình, Windows lại khó nhất vì nó không phải là hệ điều hành được thiết kế để tiện dụng cho việc này như phần còn lại của thế giới.
Bài viết này trình bày các bước để biên dịch Ruby 1.9.1 và thư viện ruby-opengl 0.60.0 bằng Visual Studio 2008. Đây là bản mới nhất của 2 cái tại thời điểm chưa đến Noel 2008 hiện nay. Với các phiên bản khác, có thể cần đổi bài chút đỉnh.

Cài Visual Studio 2008
Việc này dễ vì "chương trình đã được biên dịch sẵn cứ thế mà chạy". Các lệnh nmake, mt ở dưới đều phải chạy từ Visual Studio 2008 Command Prompt.
Cài Ruby 1.9.1
Ta sẽ biên dịch rồi cài vào thư mục c:\myruby.
- Lấy mã nguồn rồi giải nén vào thư mục tạm nào đó
- Từ console, chuyển vào thư mục đó
- Cấu hình: win32\configure.bat --prefix=c:/myruby
- Biên dịch: nmake, mất khoảng 5 phút
- Cài (tạo thư mục C:\myruby rồi copy những thứ đã biên dịch vào đó): nmake install
- Để tiện dụng, thêm đường dẫn C:\myruby\bin vào biến môi trường PATH
Đến đây, mở console mới, gõ lệnh ruby -v sẽ ra kết quả đại loại: ruby 1.9.1 (2008-10-28 revision 19983) [i386-mswin32_90].
Ruby 1.9 trở lên kèm sẵn RubyGem, nhưng vì Windows không có sẵn thư viện zlib, nên khi gõ lệnh gem list sẽ bị lỗi. Ta cài thêm zlib:
- Lấy mã nguồn của zlib về rồi giải nén vào thư mục tạm nào đó, ví dụ c:\tmp\zlib-1.2.3
- Từ console, chuyển vào thư mục đó
- Biên dịch: nmake -f win32\Makefile.msc
- Thêm manifest: mt -manifest zlib1.dll.manifest -outputresource:zlib1.dll;2
- Copy tập tin zlib1.dll vừa được biên dịch vào c:\myruby\bin
Tiếp theo, cần cài extension để Ruby có thể gọi thư viện zlib vừa cài:
- Chuyển vào thư mục ext\zlib ở thư mục chứa mã nguồn Ruby
- Cấu hình: ruby extconf.rb --with-zlib-include=c:\tmp\zlib-1.2.3 --with-zlib-lib=c:\tmp\zlib-1.2.3
- Biên dịch: nmake, có thể nmake báo lỗi không tìm thấy đường dẫn gì đó, nguyên nhân do không tìm thấy tập tin win32/rm.bat, nên không ảnh hưởng đến hòa bình thế giới
- Cài: nmake install
Đến đây, ta đã cài xong Ruby và RubyGem.
Cài ruby-opengl 0.60.0
Cài GLUT. Ngoài ra ruby-opengl cần thêm rake và mkrf:
- gem install rake --no-rdoc --no-ri
- gem install mkrf--no-rdoc --no-ri
Đến đây, nếu gem install ruby-opengl, bản dành cho Ruby 1.8 sẽ được cài. Do đó ta cần tự xoay xở:
- Lấy tập tin ruby-opengl-0.60.0.gem về, để vào thư mục tạm nào đó
- Từ thư mục đó: gem install ruby-opengl-0.60.0.gem
Đến đây nếu không bị báo lỗi gì, thì quá tốt. Nếu không cần thực hiện bước sửa mã nguồn của rake và ruby-opengl ở dưới trước khi làm tiếp các bước trong phần này.
Chạy thử ví dụ: ruby c:\myruby\lib\ruby\gems\1.9.1\gems\ruby-opengl-0.60.0\examples\RedBook\teapots.rb, nếu bị lỗi không tìm thấy MSVCR90.dll, cần thêm manifest cho các tập tin gl.so, glu.so, glut.so:
cd d:\myruby\lib\ruby\gems\1.9.1\gems\ruby-opengl-0.60.0\ext\gl
mt -manifest gl.so.manifest -outputresource:gl.so;2
cd ..\glu
mt -manifest glu.so.manifest -outputresource:glu.so;2
cd ..\glut
mt -manifest glut.so.manifest -outputresource:glut.so;2
cd ..\..
rake
Sửa mã nguồn của rake và ruby-opengl
Nếu bị lỗi '["ruby mkrf_conf.rb"]' is not recognized as an internal or external command, operable program or batch file, cần mò đến thư mục chứa thư viện rake để sửa một đoạn nhỏ trong tập tin win32.rb thành:
def rake_system(*cmd)
if cmd.size == 1
system("call #{cmd[0]}")
else
system(*cmd)
end
end
Nếu bị lỗi c:\myruby\lib\ruby\gems\1.9.1\gems\ruby-opengl-0.60.0\ext\common\conv.h(142) : error C2039: 'len' : is not a member of 'RArray', cần mò đến thư mục chứa thư viện ruby-opengl (nằm trong c:\myruby như trên, mặc dù chưa cài thành công) rồi:
- Chạy rake để xem thông báo lỗi
- Sửa các tập tin .h và .c bị báo lỗi, từ xxx->len và xxx->ptr thành RARRAY_LEN(xxx) và RARRAY_PTR(xxx), từ 1.8.6 không nên dùng trực tiếp RArray
- Lặp lại 2 bước trên đến khi nào không còn lỗi, mất khoảng 5 phút. Nếu lười tự sửa, có thể dùng tập tin đính kèm bài viết này.
172
over 2 years ago
over 2 years ago