Ruby 从源代码编译时如何安装开发工具

Ruby 从源代码编译时如何安装开发工具

我有 Windows 8,我需要为一个项目安装 Ruby 2.1.2。我遵循这些说明。我将源代码解压到C:\Ruby2.1.2\src\nmake在 中运行C:\Ruby2.1.2\build\,然后nmake install使用目标文件夹运行C:\Ruby2.1.2\bin\。当我安装 Ruby 2.1.2 时,我收到许多错误,如下所示:

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>'

看起来我需要安装开发工具。但是 仅有的 来源 我发现关于安装开发工具的信息引导我使用还没有 Ruby 2.1.2 的 RubyInstaller。

我也尝试单独安装 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)我从http://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 使用,以便它可以针对它们进行编译。

在 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 的谷歌集团

相关内容