Vinova tuyển lập trình viên Mobile & Web ở Hà Nội, lương $300-1000

Article: Biên dịch Ruby 1.9 và ruby-opengl trên Windows 1781

ngocdaothanh.myopenid.com 172
Updated 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.

Tham khảo

Comments

alide.myopenid.com 32
over 2 years ago

ruby-opengl 0.6 bị lỗi RARRAY_LEN với Ruby 1.9 nhưng phiên bản trong trunk đã được sửa.

ngocdaothanh.myopenid.com 172
over 2 years ago

ruby-opengl 0.60.1 vừa ra:

  • Bugfixes
  • Proper support for ruby 1.9/1.9.1+
  • Updated OpenGL enumerators in preparation for OpenGL 3.0

You must login to be able to comment

Uploaded files
Name Size Uploader Time
ext.zip 140.4 KB
ngocdaothanh.myopenid.com 172
over 2 years ago

You must login to be able to upload

Nhà tài trợ:

Mọi người đều tự do viết bài, sửa bài của người khác, và bình luận ở trang web này. Bạn muốn chủ động tạo bài mới để chia sẻ kinh nghiệm với mọi người? Xin click link ở dưới.

Create new content