Ошибка установки therubyracer

Как вы можете видеть ниже, libv8 устанавливается нормально, а therubyracer - нет. Я использую Mac 10.7.4.

~/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1> gem install libv8
Building native extensions.  This could take a while...
Successfully installed libv8-3.11.8.3
1 gem installed
Installing ri documentation for libv8-3.11.8.3...
Installing RDoc documentation for libv8-3.11.8.3...

~/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1> gem install therubyracer
Building native extensions.  This could take a while...
ERROR:  Error installing therubyracer:
    ERROR: Failed to build gem native extension.

        /Users/rdp/.rvm/rubies/ruby-1.9.3-p125/bin/ruby extconf.rb
checking for main() in -lobjc... *** 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
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/Users/rdp/.rvm/rubies/ruby-1.9.3-p125/bin/ruby
    --with-objclib
    --without-objclib
/Users/rdp/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:381:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
    from /Users/rdp/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:461:in `try_link0'
    from /Users/rdp/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:476:in `try_link'
    from /Users/rdp/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:619:in `try_func'
    from /Users/rdp/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:845:in `block in have_library'
    from /Users/rdp/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:790:in `block in checking_for'
    from /Users/rdp/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:284:in `block (2 levels) in postpone'
    from /Users/rdp/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:254:in `open'
    from /Users/rdp/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:284:in `block in postpone'
    from /Users/rdp/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:254:in `open'
    from /Users/rdp/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:280:in `postpone'
    from /Users/rdp/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:789:in `checking_for'
    from /Users/rdp/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:840:in `have_library'
    from extconf.rb:10:in `<main>'


Gem files will remain installed in /Users/rdp/.rvm/gems/ruby-1.9.3-p125/gems/therubyracer-0.10.1 for inspection.
Results logged to /Users/rdp/.rvm/gems/ruby-1.9.3-p125/gems/therubyracer-0.10.1/ext/v8/gem_make.out

Вот mkmf.log, который находится в ~/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/gems/1.9/gems/therubyracer-0.10.1/ext/v8>,

Параметры редактирования файла

"/usr/bin/gcc-4.2 -o conftest -I/Users/rdp/.rvm/rubies/ruby-1.9.3-p125/include/ruby-1.9.1/x86_64-darwin11.3.0 -I/Users/rdp/.rvm/rubies/ruby-1.9.3-p125/include/ruby-1.9.1/rub\
y/backward -I/Users/rdp/.rvm/rubies/ruby-1.9.3-p125/include/ruby-1.9.1 -I. -I/Users/rdp/.rvm/usr/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE    -O3 -ggdb -Wextra -Wno-unused-\
parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-functio\
n-declaration  -fno-common -pipe conftest.c  -L. -L/Users/rdp/.rvm/rubies/ruby-1.9.3-p125/lib -L/Users/rdp/.rvm/usr/lib -L.      -lruby.1.9.1  -lpthread -ldl -lobjc "
checked program was:
/* begin */
1: #include "ruby.h"
2:
3: int main() {return 0;}
/* end */

14 ответов

Решение

Вы можете использовать Libv8 из варева вместо одного из драгоценного камня. Вы можете сделать это с помощью следующих команд:

$ gem uninstall libv8
$ brew install v8
$ gem install therubyracer

@ Ответ Хэгина в https://github.com/cowboyd/libv8/issues/205

brew uninstall v8
brew install v8-315
gem uninstall -a libv8
gem uninstall -a therubyracer
gem install libv8 -v '3.16.14.17' -- --with-system-v8
gem install therubyracer -v '0.12.2' -- --with-v8-dir=$(brew --prefix v8-315)

Для более старого проекта мне пришлось использовать версию 0.10.1 rubyracer на mavericks (зависит от нее начальная загрузка)

Поэтому мне пришлось использовать более старую версию GCC

  1. отредактируйте ваш.zshrc или.bashrc

    export CC=/usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/gcc-4.2
    export CXX=/usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/g++-4.2
    export CPP=/usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/cpp-4.2
    
  2. убедитесь, что вы удалили все старые версии libv8

    gem uninstall libv8
    
  3. установите свою версию therubyracer

    gem install therubyracer -v=0.10.1
    

Для Linux:

Код ниже, конечно, правильный

$ gem uninstall libv8

$ gem install therubyracer

Но иногда это не помогает, потому что у вас нет программы make, Сначала вам нужно установить make, Для этого запустите:

sudo apt-get install build-essential

И только после этого:

gem install therubyracer

На Mavericks вам просто нужно обновить до therubyracer 0.12.0

Эти шаги работали для меня:

  • brew uninstall v8
  • brew install v8-315
  • gem uninstall -a libv8
  • gem uninstall -a therubyracer
  • gem install libv8 -v '3.16.14.19' -- --with-system-v8
  • gem install therubyracer -v '0.12.3' -- --with-v8-dir=$(brew --prefix v8-315)

Mac 10.10.5, Ruby 2.1.0 это работает для меня:

gem uninstall libv8
gem uninstall therubyracer

brew upgrade gcc
brew install v8

bundle config --local build.libv8 --with-cxx=/usr/local/bin/gcc-6
gem install libv8 -v '3.16.14.17' -- --with-system-v8
gem install therubyracer -- --with-v8-dir=/usr/local/opt/v8-315

bundle install # worked !

Решением, которое работало для меня, было объединение этих шагов в 10.7.4.

export CC=gcc-4.2

sudo ln /usr/bin/gcc /usr/bin/gcc-4.2

gem uninstall libv8
gem install therubyracer

На Mountain Lion 10.8 он не поставляется с предустановленным C-компилятором. Вам нужно будет загрузить и установить пакет "инструментов командной строки" от Apple, а затем запустить which gcc чтобы подтвердить это установлено. С этого момента все должно работать нормально.

У меня точно такая же проблема до сих пор.

Эта ссылка спасла меня.

Подводя итог, вы должны сделать это:

$ gem uninstall libv8
$ gem install therubyracer

До того, как я исправил эту проблему, на моем Mac была установлена ​​версия 8. Я не знаю, помогло ли это, так как кажется, что это связано с интерпретатором js, я подумал, что это может помочь.

На OS X 10.7 я обнаружил, что пакета "Инструменты командной строки" было недостаточно, мне пришлось установить полноценный пакет XCode, после чего сработала установка gem.

У меня была такая же проблема, когда я обновил OSX Mountain Lion до OSX Mavericks.

Обновление с ruby-1.8.7-p354 до ruby-1.8.7-375 помогло мне. Если вы используете ruby-1.93-p125, вы можете попробовать обновить до 1.9.3-rc1 (что уже выше p484)

libv8 (3.16.14.3-x86_64-darwin-13) и гемы therubyracer (0.12.0) установлены без проблем.

при условии, что вы используете rbenv:

rbenv install 1.9.3-rc1
rbenv rehash
rbenv shell 1.9.3-rc1
bundle install

Согласно https://github.com/cowboyd/therubyracer/issues/420

gem uninstall therubyracer
gem uninstall libv8
brew uninstall v8
brew install v8
gem install libv8
gem install therubyracer

Это помогло мне. Параметры: ruby 2.3.3, rails 4.2.9

Установите v8:

      brew install v8@3.15

После установки гем libv8:

      gem install libv8 -v 3.16.14.19 -- --with-system-v8

И установить конкретную версию therubyracer:

      gem install therubyracer  -v '0.12.3' -- --with-v8-dir=/usr/local/opt/v8@3.15
Другие вопросы по тегам