3

У меня 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>'

Похоже, мне нужно установить средства разработки. Но эти единственные источники , которые я нашел об установке средств разработки направил меня к RubyInstaller , который не имеет рубин 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" , но это снова дало мне первую ошибку.

Как мне установить средства разработки, чтобы я мог заставить работать рубины?

2 ответа2

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 я переместился в 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.

Дайте мне знать, если у вас есть какие-либо вопросы о моих шагах.

0

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 битную версию 4.7.2 компилятора (GCC) mingw64 и использовать проверку локального источника, указанную в LOCAL

Все это описано в README RubyInstaller.

Если вам нужна дополнительная помощь, обратитесь в группу Google RubyInstaller.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .