Câu hỏi Cách cài đặt các công cụ phát triển khi Ruby được biên dịch từ nguồn


Tôi có Windows 8, và tôi cần phải cài đặt Ruby 2.1.2 cho một dự án. Tôi đã theo dõi những hướng dẫn này. Tôi giải nén nguồn vào C:\Ruby2.1.2\src\, chạy nmake trong C:\Ruby2.1.2\build\, và chạy nmake install với thư mục đích C:\Ruby2.1.2\bin\. Khi tôi cài đặt Ruby 2.1.2, tôi nhận được một số lỗi như sau:

configuring zlib
Failed to configure zlib. It will not be installed.

Điều này xảy ra cho dbm, fiddle, gdbm, openssl, pty, readline, syslog, tk, tk / tkutil và zlib. Tuy nhiên, các bài kiểm tra trong nmake test tất cả đều vượt qua.

Tôi đã có Ruby 2.0.0 và 1.9.3, nhưng tôi cần 2.0.0 cho các dự án khác. tôi đang dùng pik 0.3.0.pre để quản lý các dependecies, và nó có vẻ là làm việc cho 2.0.0 và 1.9.3.

Tuy nhiên nếu tôi chuyển sang chạy Ruby 2.1.2 gem install cho bất cứ điều gì, tôi nhận được:

ERROR:  Loading command: install (LoadError)
        cannot load such file -- zlib
ERROR:  While executing gem ... (NoMethodError)
    undefined method `invoke_with_build_args' for nil:NilClass

Sau một số lần đào, tôi đã thử điều hướng đến C: \ Ruby2.1.2 \ src \ ruby-2.1.2 \ ext \ zlib và chạy ruby extconf.rb Lỗi tôi nhận được là:

checking for deflateReset() in z.lib... *** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
        --with-opt-dir
        --without-opt-dir
        --with-opt-include
        --without-opt-include=${opt-dir}/include
        --with-opt-lib
        --without-opt-lib=${opt-dir}/lib
        --with-make-prog
        --srcdir=.
        --curdir
        --ruby=C:/Ruby2.1.2/bin/usr/bin/ruby
        --with-zlib-dir
        --with-zlib-include
        --without-zlib-include=${zlib-dir}/include
        --with-zlib-lib
        --without-zlib-lib=${zlib-dir}/lib
        --with-zlib
        --without-zlib
C:/Ruby2.1.2/bin/usr/lib/ruby/2.1.0/mkmf.rb:456:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
        from C:/Ruby2.1.2/bin/usr/lib/ruby/2.1.0/mkmf.rb:541:in `try_link0'
        from C:/Ruby2.1.2/bin/usr/lib/ruby/2.1.0/mkmf.rb:556:in `try_link'
        from C:/Ruby2.1.2/bin/usr/lib/ruby/2.1.0/mkmf.rb:742:in `try_func'
        from C:/Ruby2.1.2/bin/usr/lib/ruby/2.1.0/mkmf.rb:973:in `block in have_library'
        from C:/Ruby2.1.2/bin/usr/lib/ruby/2.1.0/mkmf.rb:918:in `block in checking_for'
        from C:/Ruby2.1.2/bin/usr/lib/ruby/2.1.0/mkmf.rb:351:in `block (2 levels) in postpone'
        from C:/Ruby2.1.2/bin/usr/lib/ruby/2.1.0/mkmf.rb:321:in `open'
        from C:/Ruby2.1.2/bin/usr/lib/ruby/2.1.0/mkmf.rb:351:in `block in postpone'
        from C:/Ruby2.1.2/bin/usr/lib/ruby/2.1.0/mkmf.rb:321:in `open'
        from C:/Ruby2.1.2/bin/usr/lib/ruby/2.1.0/mkmf.rb:347:in `postpone'
        from C:/Ruby2.1.2/bin/usr/lib/ruby/2.1.0/mkmf.rb:917:in `checking_for'
        from C:/Ruby2.1.2/bin/usr/lib/ruby/2.1.0/mkmf.rb:968:in `have_library'
        from extconf.rb:13:in `block in <main>'
        from extconf.rb:13:in `each'
        from extconf.rb:13:in `find'
        from extconf.rb:13:in `<main>'

Có vẻ như tôi cần cài đặt các công cụ phát triển. Nhưng các  chỉ có  nguồn  tôi đã tìm thấy về việc cài đặt các công cụ phát triển đã hướng tôi đến RubyInstaller chưa có Ruby 2.1.2.

Tôi cũng đã thử cài đặt zlib riêng và chạy ruby extconf.rb --with-zlib-dir="C:\Program Files (x86)\GnuWin32", nhưng điều đó lại cho tôi lỗi thứ hai.

Một điều khác mà tôi đã thử đang chạy gem install zlib -- --with-zlib-dir="C:\Program Files (x86)\GnuWin32", nhưng điều đó lại cho tôi lỗi đầu tiên.

Làm cách nào để cài đặt các công cụ phát triển để tôi có thể sử dụng rubygems?


3
2017-07-11 00:39


gốc


Tôi có cùng một vấn đề: (Rất thích tìm giải pháp. Một gợi ý tôi nhận được là công việc cào từ ruby-installer, nhưng tất cả nó dường như đang làm là đặt zlib1.dll vào thư mục src của Ruby. Tôi không có thời gian để kiểm tra kỹ lưỡng này ra tuy nhiên. - Automatico


Các câu trả lời:


Eva, Bạn có thể giải quyết vấn đề của mình không?

Tôi đang làm điều tương tự như bạn (sử dụng Windows 8.1), và cuối cùng tôi đã cài đặt zlib.

1) Tôi đã tải xuống zlib128-dll.zip từ http://zlib.net và giải nén nội dung vào một thư mục (ví dụ: c: \ zlib).

2) Sau đó làm theo một số gợi ý từ bài đăng này (https://www.ruby-forum.com/topic/4421852), Tôi đã tạo các thư mục này trong thư mục c: \ ruby-build \ usr của tôi:

zlib
zlib\include
zlib\lib

3) Sau đó, tôi đã sao chép một số tệp từ thư mục C: \ zlib của tôi vào thư mục c: \ ruby-build \ usr của mình:

*.h files (both) from C:\zlib\include to c:\ruby-build\usr\zlib\include 
zdll.lib from C:\zlib\lib to c:\ruby-build\usr\zlib\lib. 
zlib1.dll *AS* zlib.dll from C:\zlib to both c:\ruby-build\usr\zlib\lib and c:\ruby-build\usr\bin 
    (not sure which one or both are necessary).

4) Sau đó, từ cửa sổ lệnh công cụ bản địa VS 2012, tôi chuyển hướng đến C: \ ruby-2.1.2 \ ext \ zlib và thực thi:

\ruby-build\usr\bin\ruby extconf.rb --with-zlib-dir=c:/ruby-build/usr/zlib

5) Sau đó, nmake, tiếp theo là nmake cài đặt, và thì đấy, tôi zlib cuối cùng đã được cài đặt.

Hãy cho tôi biết nếu bạn có bất kỳ câu hỏi nào về các bước của tôi.


1
2017-09-04 15:24





Ruby bao gồm một số thư viện, một phần của thư viện chuẩn (stdlib) phụ thuộc vào thư viện bên ngoài, như Zlib, OpenSSL, FFI, chỉ cần đề cập đến một vài.

Để xây dựng Ruby, bạn cần phải làm cho các thư viện đó có sẵn cho Ruby, vì vậy nó có thể biên dịch chúng.

Tại RubyInstaller, chúng tôi đã giải quyết vấn đề đó bằng cách xây dựng các phụ thuộc như các gói và sử dụng chúng trong quá trình biên dịch Ruby.

Trong trường hợp của bạn, xuất hiện bạn đang sử dụng Visual Studio, có nghĩa là bạn không thể sử dụng các gói nhị phân được cung cấp bởi RubyInstaller như các phụ thuộc thời gian chạy của những khác biệt đó.

Nếu việc sử dụng Visual Studio thực sự không phải là một yêu cầu, thì có lẽ bạn có thể sử dụng các công thức của RubyInstaller để tạo ra một gói địa phương của Ruby 2.1.x:

cd rubyinstaller
rake ruby21 DKVER=mingw64-32-4.7.2 LOCAL=C:\path\to\ruby\source

Điều này cho phép các công thức của RubyInstaller sử dụng mingw64 trình biên dịch (GCC) 32 bit phiên bản 4.7.2 và sử dụng thanh toán nguồn cục bộ được chỉ ra LOCAL

Tất cả điều này được đề cập trong RubyInstaller README

Nếu bạn cần hỗ trợ thêm, vui lòng liên hệ với RubyInstaller Google Group


0
2017-08-27 22:47