
我有 Windows 8,我需要為一個專案安裝 Ruby 2.1.2。我跟著這些說明。我將來源檔案解壓縮到目標資料夾中,然後C:\Ruby2.1.2\src\
運行。當我安裝 Ruby 2.1.2 時,出現了一些以下錯誤:nmake
C:\Ruby2.1.2\build\
nmake install
C:\Ruby2.1.2\bin\
configuring zlib
Failed to configure zlib. It will not be installed.
dbm、fiddle、gdbm、openssl、pty、readline、syslog、tk、tk/tkutil 和 zlib 都發生這種情況。然而,測試nmake test
全部通過。
我已經有了 Ruby 2.0.0 和 1.9.3,但其他項目需要 2.0.0。我在用pik 0.3.0.pre管理依賴關係,它似乎適用於 2.0.0 和 1.9.3。
但是,如果我切換到 Ruby 2.1.2 運行gem install
任何東西,我會得到:
ERROR: Loading command: install (LoadError)
cannot load such file -- zlib
ERROR: While executing gem ... (NoMethodError)
undefined method `invoke_with_build_args' for nil:NilClass
經過一番挖掘後,我嘗試導航到 C:\Ruby2.1.2\src\ruby-2.1.2\ext\zlib 並運行ruby extconf.rb
我得到的錯誤是:
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>'
看來我需要安裝開發工具了。但這 僅有的 來源 我發現關於安裝開發工具引導我使用 RubyInstaller,它還沒有 Ruby 2.1.2。
我還嘗試單獨安裝 zlib 並運行ruby extconf.rb --with-zlib-dir="C:\Program Files (x86)\GnuWin32"
,但這又給了我第二個錯誤。
我嘗試的另一件事是運行gem install zlib -- --with-zlib-dir="C:\Program Files (x86)\GnuWin32"
,但這給了我第一個錯誤。
如何安裝開發工具才能讓 rubygems 運作?
答案1
伊娃,你能解決你的問題嗎?
我正在做與你完全相同的事情(使用 Windows 8.1),我終於安裝了 zlib。
1)我從下載了zlib128-dll.ziphttp://zlib.net並將內容解壓縮到一個目錄(例如,c:\zlib)。
2)然後按照這篇文章的一些提示(https://www.ruby-forum.com/topic/4421852),我在 c:\ruby-build\usr 目錄中建立了這些目錄:
zlib
zlib\include
zlib\lib
3)然後我將一些檔案從 C:\zlib 目錄複製到我的 c:\ruby-build\usr 目錄:
*.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)然後從 VS 2012 Native Tools 命令列窗口,導航到 C:\ruby-2.1.2\ext\zlib 並執行:
\ruby-build\usr\bin\ruby extconf.rb --with-zlib-dir=c:/ruby-build/usr/zlib
5)接著是nmake,然後是nmake install,瞧,我的zlib終於安裝好了。
如果您對我的步驟有任何疑問,請告訴我。
答案2
Ruby 包含幾個函式庫,它們的一部分標準函式庫(stdlib) 依賴外部函式庫,例如 Zlib、OpenSSL、FFI,僅舉幾例。
為了建立 Ruby,您需要使這些函式庫可供 Ruby 使用,以便 Ruby 可以針對它們進行編譯。
在 RubyInstaller,我們透過將依賴項建置為套件並在 Ruby 編譯期間使用它們來解決這個問題。
在您的情況下,您似乎正在使用 Visual Studio,這意味著您無法使用 RubyInstaller 提供的二進位套件,因為它們的執行時間依賴項不同。
如果確實不需要使用 Visual Studio,那麼也許您可以使用 RubyInstaller 配方來產生 Ruby 2.1.x 的本機套件:
cd rubyinstaller
rake ruby21 DKVER=mingw64-32-4.7.2 LOCAL=C:\path\to\ruby\source
這告訴 RubyInstaller 配方使用mingw64
編譯器 (GCC) 32 位元版本 4.7.2 並使用指向的本地來源簽出LOCAL
所有這些都包含在 RubyInstaller 中自述文件
如果您需要進一步協助,請聯絡 RubyInstaller谷歌集團