
У меня 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 для других проектов. Я используюпик 0.3.0.предля управления зависимостями, и, похоже, это работает для 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>'
Похоже, мне нужно установить инструменты разработки. Ноthe только источники я нашелоб установке средств разработки направил меня к 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.zip с сайта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'sГруппа Google