Установка libv8 gem на OS X 10.9+

212

Я пытаюсь установить libv8 3.16.14.3, но получаю ошибку на OSX Mavericks, используя последние стабильные версии rvm и ruby-1.9.3-p125.

Это результат выполнения команды 'gem install libv8':

~/src(branch:master) » gem install libv8
Fetching: libv8-3.16.14.3.gem (100%)
Building native extensions.  This could take a while...
ERROR:  Error installing therubyracer:
  ERROR: Failed to build gem native extension.

    /Users/me/.rvm/rubies/ruby-1.9.3-p125/bin/ruby extconf.rb
creating Makefile
Compiling v8 for x64
Using python 2.7.5
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Unable to find a compiler officially supported by v8.
It is recommended to use GCC v4.4 or higher
Using compiler: g++
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Unable to find a compiler officially supported by v8.
It is recommended to use GCC v4.4 or higher
libtool: unrecognized option `-static'
libtool: Try `libtool --help' for more information.
make[1]: *** [/Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/libpreparser_lib.a] Error 1
make: *** [x64.release] Error 2
/Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/ext/libv8/location.rb:36:in `block in verify_installation!': libv8 did not install properly, expected binary v8 archive '/Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/tools/gyp/libv8_base.a'to exist, but it was not found (Libv8::Location::Vendor::ArchiveNotFound)
  from /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/ext/libv8/location.rb:35:in `each'
  from /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/ext/libv8/location.rb:35:in `verify_installation!'
  from /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/ext/libv8/location.rb:26:in `install!'
  from extconf.rb:7:in `<main>'
GYP_GENERATORS=make \
  build/gyp/gyp --generator-output="out" build/all.gyp \
                -Ibuild/standalone.gypi --depth=. \
                -Dv8_target_arch=x64 \
                -S.x64  -Dv8_enable_backtrace=1 -Dv8_can_use_vfp2_instructions=true -Darm_fpu=vfpv2 -Dv8_can_use_vfp3_instructions=true -Darm_fpu=vfpv3
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/allocation.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/atomicops_internals_x86_gcc.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/bignum.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/bignum-dtoa.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/cached-powers.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/conversions.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/diy-fp.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/dtoa.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/fast-dtoa.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/fixed-dtoa.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/once.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/preparse-data.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/preparser.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/preparser-api.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/scanner.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/strtod.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/token.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/unicode.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/utils.o
  LIBTOOL-STATIC /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/libpreparser_lib.a


Gem files will remain installed in /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3 for inspection.
Results logged to /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/ext/libv8/gem_make.out
tanookiben
источник

Ответы:

463

Это связано с тем, что OS X 10.9+ использует версию 4.8 GCC. Официально это не поддерживается в более старых версиях libv8, как указано в запросе на извлечение ( https://github.com/cowboyd/libv8/pull/95 ). Пожалуйста, попробуйте увеличить версию libv8 в вашем Gemfile (или) bundle updateдолжно быть достаточно. Надеюсь это поможет.

Из libv8 README

Принесите свой собственный V8

Поскольку libv8 является интерфейсом для движка V8, используемого therubyracer, вам может понадобиться использовать libv8, даже если у вас уже установлен V8. Если вы хотите использовать собственную установку V8, а не создавать ее для себя, используйте параметр --with-system-v8.

Используя RubyGems:

gem install libv8 [-v YOUR_VERSION] - --with-system-v8

Используя Bundler (в вашем Gemfile):

комплектация build.libv8 --with-system-v8

Обратите внимание, что если вы собираетесь запустить свой собственный V8, вы должны установить как V8, так и его заголовки (см. Libv8-dev для дистрибутивов Debian).

Принеси свой собственный компилятор

Вы можете указать компилятор по вашему выбору, установив переменную среды CXX перед компиляцией, или добавив параметр --with-cxx = в конфигурацию пакета:

комплектация build.libv8 --with-cxx = clang ++

Редактировать:

Если эта проблема вызвана therubyracer, попробуйте следующее, как предложено rider_on_rails здесь :

gem удалить libv8

gem install therubyracer -v YOUR_RUBY_RACER_VERSION

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

Гаурав Агарвал
источник
К сожалению, я не могу изменить версию libv8 в проекте, над которым я работаю. Сейчас я буду переходить на OSX 10.8!
танукибен
35
--with-system-v8FTW!
JPowell
24
Спасибо! bundle config build.libv8 --with-system-v8 помогает!
Андрей Скуратовский
7
bundle updateвызволил меня из царства онемения и несчастья,
вызванного апгрейдом яблока
6
Если кто-то получит следующую проблему с therubyracerгемом после ее решения: stackoverflow.com/questions/23536893/…
Gustavo Semião-Lobo
219

Вы можете установить эту версию на Mavericks:

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

Я могу подтвердить это работает с rbenv и ruby ​​1.9.3p448

Оливер Шоу
источник
5
То же самое для меня - os x 10.9, rbenv и ruby-2.0.0-p247
roo
1
Работал над 1.8.7 для старого проекта :)
Хуан де Диос Х.
3
Почему это работает? Какая часть команды модифицирует --with-system-v8 и что она делает?
Дэвид Крайдер
4
В соответствии с инструкциями здесь github.com/cowboyd/libv8 libv8 позволяет вам использовать уже существующую версию движка V8 ( en.wikipedia.org/wiki/V8_(JavaScript_engine) ), а не компилировать ее самостоятельно. Это компиляция, которая является проблемой в Mavericks, поскольку компиляторы C ++ изменились. Вы можете скомпилировать libV8 самостоятельно, используя инструкции здесь ( stackoverflow.com/a/19668162/2012130 )
Оливер Шоу
5
работает с rbenv и ruby ​​2.1.1 -gem install libv8 -- --with-system-v8
Андрей
35

Эль Капитан Решение для меня:

$ brew install v8
$ gem install libv8 -v REQUIRED_LIBV8_VERSION -- --with-system-v8

Где REQUIRED_LIBV8_VERSIONдля меня был 3.16.14.7, но вам нужно проверить, какой из них вам нужен в вашем комплекте (это был тот для рельсов 4.2.5)

Вам также может потребоваться запустить приведенные выше команды как суперпользователь (если ваши гемы и системные библиотеки глобальны)

Евгения Манолова
источник
4
Вы не должны использовать sudo для установки brew или gem. Это создает проблемы с разрешениями.
bendangelo
2
@benDangelo, то, что вы говорите, абсолютно правильно. Хотя системе иногда могут потребоваться права суперпользователя для установки программного обеспечения, использование sudo на общих основаниях является плохой практикой. Я отредактирую свой ответ, спасибо.
Евгения Манолова
Меня устраивает! Спасибо. Это было единственное рабочее решение.
Чарльз Хэмел
14

Когда я попробовал принятый ответ, libv8 успешно установился с gem install libv8, но bundle installна libv8 произошел сбой. я так думаюbundle install пытался установить другую версию libv8. Я смог найти решение, которое сработало для меня.

Мне нужен был libv8, потому что от него зависит therubyracer. Чтобы установить его, я отметил версию, которую не удалось установить, в gem_make.outжурнале therubyracer. (Путь кgem_make.out журналу будет указан в сообщении об ошибке.) В моем случае это было 3.16.14.7. (Эта версия, вероятно, со временем изменится, если вы читаете это через три года.) Тогда я сделал это:

gem install libv8 -v 3.16.14.7 -- --with-v8-lib <- отметьте отличия от принятого ответа

что позволило это работать:

gem install therubyracer

что позволило мне завершить мой bundle install .

Это работало для меня на OSX Yosemite.

Стивен Хирлстон
источник
Должен заметить, что установка комплекта для меня прервалась сразу после обновления до OSX Yosemite, поэтому мне пришлось искать это решение.
Стивен Хирлстон
Это прекрасно работает на OS X Yosemite, в то время как многие другие ответы просто не работают.
Рой Ли
Спасибо друг. 'therubyracer' наконец-то установлен.
Кирилл Пляшкевич
8

https://github.com/cowboyd/therubyracer/issues/339

Решение Джейсонлин, найденное по этой ссылке, помогло мне. все остальное не сработало.

brew install homebrew/versions/v8-315
brew link --overwrite v8-315 --force
gem install libv8 -v '3.16.14.13' -- --with-system-v8
gem install therubyracer -v '0.12.2' -- --with-system-v8
Stefanos.Ioannou
источник
1
Я не могу поверить, почему это все еще проблема в 2020 году ... Спасибо @ Stefanos.Ioannou, это решение, которое работало для меня.
Авраам Милано
7

Вы можете настроить упаковщик вместо того, чтобы знать каждую версию. @ 3.15 можно заменить другими версиями.

$ brew install v8@3.15
$ bundle config build.libv8 --with-system-v8
$ bundle config build.therubyracer --with-v8-dir=$(brew --prefix v8@3.15)
$ bundle install
Питер ДеВиз
источник
1
Работает на macOS Каталина. Спасибо!
Александр К.
4

Я обновился до macOS Catalina @ 10.15 и ruby 2.6.5. Через некоторое время получил libv8и therubyracerустановить снова, хотя я бы рекомендовал пока не обновлять macOS (слышалruby должно быть в порядке).

Сначала мне пришлось обновить XCode

  1. xcode-select --install

Я использовал rbenvдля обновления rubyи установить rubyверсию вручную /Users/<username>/.rbenv/versionдля 2.6.5. Хотя это не должно иметь значения, если ваш проект содержит .ruby-versionфайл.

Затем я вымыл любую версию я установил сюда libv8( как правило , в /usr/local/opt/): brew uninstall v8,brew uninstall libv8@3.15

  1. brew install v8@3.15

Теперь, следуя https://github.com/cowboyd/libv8#do-i-get-a-binary , я установил

  1. gem install libv8 -v '3.16.14.19' -- --with-system-v8

а затем может работать bundle installбез ошибок.

chriszo111
источник
4

Моя проблема с тех пор therubyracer, когда обновление macOS 10.15иruby-2.6.5

И у меня работает следующее:

brew install v8@3.15

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

gem install therubyracer -- --with-v8-dir=/usr/local/opt/v8@3.15
Алан Ван
источник
1

У меня была такая же проблема, когда я обновил OSX Mountain Lion до OSX Mavericks. Принятый ответ сработал для libv8, но не тогда, когда я пошел в комплекте установить therubyracer gem.

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

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

rbenv versions
  system
  * 1.8.7-p354
  2.0.0-rc2

rbenv uninstall 1.8.7-p354
rbenv install 1.8.7-p375

rbenv versions
  system
  * 1.8.7-p375
  2.0.0-rc2

bundle install
nelsonenzo
источник
1

Это работало нормально для меня:

Попробуйте установить этот предварительно скомпилированный гем:

https://dl.dropboxusercontent.com/u/7919548/gems/libv8/libv8-3.11.8.17-x86_64-darwin-13.gem (sha1: 5ce07aaf4085fff5a5e10fe018fd6b22021bef3b)

Или, если вы предпочитаете создавать свои собственные:

  git clone https://github.com/cowboyd/libv8.git
  cd libv8
  git checkout 3.11
  bundle install
  bundle exec rake clean build binary
  gem install pkg/libv8-3.11.8.17-x86_64-darwin-13.gem

Источник: https://github.com/cowboyd/libv8/issues/107

Спасибо Феликсу Бюнеманну за исправление!

Тило
источник
1

Я попробовал несколько решений, описанных в предыдущих ответах, но обнаружил, что работающий пакет (для установки других, отсутствующих гемов) попытается перекомпилировать libv8 (несмотря на то, что он уже успешно установлен с использованием --with-system-v8 ) и, таким образом, страдает от той же проблемы.

В конце концов я обнаружил, что удаление гема libv8, извлечение файла гема из rubygems, а затем ручная установка .gemфайла с --with-system-v8флагом помогли мне.

т.е.

gem uninstall libv8
gem fetch libv8 -v LIBV8_VERSION
gem install libv8-LIBV_VERSION.gem -- --with-system-v8
bundle

Спасибо Гаураву Агарвалу за ответ, который привел меня на правильный путь!

XtraSimplicity
источник
1

Ничто из этого не помогло мне ... что бы я ни делал, моя установка gem therubyracer продолжала жаловаться на эту ошибку:

Unable to find a compiler officially supported by v8.
It is recommended to use GCC v4.4 or higher
Beginning compilation. This will take some time.
Building v8 with env CXX=clang++ LINK=clang++  /usr/local/bin/gmake x64.release ARFLAGS.target=crs werror=no
GYP_GENERATORS=make \
build/gyp/gyp --generator-output="out" build/all.gyp \
              -Ibuild/standalone.gypi --depth=. \
              -Dv8_target_arch=x64 \
              -S.x64 -Dmac_deployment_target=10.15 -Dv8_enable_backtrace=1 -Dv8_can_use_vfp2_instructions=true -Darm_fpu=vfpv2 -Dv8_can_use_vfp3_instructions=true -Darm_fpu=vfpv3 -Dwerror=''
  File "build/gyp/gyp", line 12
    except ImportError, e:
                      ^
SyntaxError: invalid syntax
gmake: *** [Makefile:268: out/Makefile.x64] Error 1

В конечном итоге мне помог этот форум, на который я наткнулся на https://www.bountysource.com/issues/82833405-libv8-fails-to-build-on-catalina-10-15.

Окончательное решение, которое сработало для меня:

Мне пришлось добавить эти строки в мой файл .zshrc:

export CXX=clang++
export GYPFLAGS=-Dmac_deployment_target=10.15

Затем я должен был выполнить эти команды:

source ~/.zshrc
brew tap homebrew/homebrew-core
brew install v8@3.15
gem uninstall therubyracer
gem uninstall libv8
gem install libv8 -v '3.16.14.19' -- --with-system-v8
gem install therubyracer -v '0.12.3' -- --with-v8-dir=/usr/local/opt/v8@3.15
bundle install

Я надеюсь, что кто-то еще находит это полезным!

Том Чапин
источник
0

Вы можете попробовать вручную скомпилировать и установить gem с помощью метода, упомянутого на сайте libv8 github.

RonanOD
источник
0

В MAC-Yosemite со средой RVM и версией ruby-2.1.1

gem install libv8 -v 3.16.14.3 -- --with-v8-lib gem install therubyracer

Он работает с помощью вышеуказанной команды, может подтвердить это.

Кишоре Мохан
источник
0

Для меня действительно работало обновление ruby ​​до 2.2.0, удаление Gemfile.lock и повторная сборка.

Работал как шарм!

tomascharad
источник
0

Это то, что сработало для меня.

заменить 3.16.14.7на вашу версию.

bundle install
gem install libv8 -v '3.16.14.7' -- --with-system-v8

bundle install
gem uninstall libv8 -v '3.16.14.7' -- --with-system-v8

brew install homebrew/dupes/apple-gcc42

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

bundle install
Ариан Фауртош
источник
это заставляет старый gcc, который в лучшем случае будет пластырем и определенно вызовет проблемы в будущем.
Джим Врубель
0

Я столкнулся с подобной проблемой на El Cap. Вот что я сделал.

brew tap homebrew/dupes
brew install apple-gcc42

А потом,

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

В заключение,

brew uninstall v8
gem install libv8 -v 3.11.8.17 -- --with-system-v8
bittterbotter
источник
0

Я использовал бета-версию Xcode для другого проекта и забыл. Вернитесь с помощью xcode-select. Что-то вроде:

sudo xcode-select --switch /Applications/Xcode.app/
huwr
источник
-6

Удалить из Gemfile:

gem 'therubyracer',: platform =>: ruby

Роберто Капело
источник
2
Этот вид побеждает всю цель этого поста.
Дан