Ruby源碼編譯時如何安裝開發工具

Ruby源碼編譯時如何安裝開發工具

我有 Windows 8,我需要為一個專案安裝 Ruby 2.1.2。我跟著這些說明。我將來源檔案解壓縮到目標資料夾中,然後C:\Ruby2.1.2\src\運行。當我安裝 Ruby 2.1.2 時,出現了一些以下錯誤:nmakeC:\Ruby2.1.2\build\nmake installC:\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",但這給了我第一個錯誤。

如何安裝開發工具才能讓 ruby​​gems 運作?

答案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谷歌集團

相關內容