我有 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"
,但这再次给我带来了第一个错误。
如何安装开发工具以使 rubygems 正常工作?
答案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 的谷歌集团