Встановлення 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

Відповіді:


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 встановити libv8 [-v YOUR_VERSION] - --with-system-v8

Використання Bundler (у вашому Gemfile):

bundle config build.libv8 --with-system-v8

Зауважте, що якщо ви плануєте запускати свій власний V8, ви повинні встановити як V8, так і його заголовки (знайдені в libv8-dev для дистрибутивів Debian).

Візьміть власний компілятор

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

bundle config build.libv8 --with-cxx = clang ++

Редагувати:

Якщо ця проблема викликана therubyracer, спробуйте наступне, як запропонував rider_on_rails тут :

самоцвіт видалити libv8

gem встановіть therubyracer -v YOUR_RUBY_RACER_VERSION

gem встановити libv8 -v YOUR_VERSION - --with-system-v8


На жаль, я не можу змінити версію libv8 в проекті, над яким я працюю. Я зараз буду переходити на OSX 10.8!
tanookiben

35
--with-system-v8FTW!
JPowell

24
Дякую! bundle config build.libv8 --with-system-v8 допомагає!
Андрій Скуратовський

7
bundle updateвирятували мене з царства оніміння та страждань, що
завдавали яблук

6
У разі , якщо хто - то отримує наступну проблему з therubyracerдорогоцінним каменем після вирішення цього: stackoverflow.com/questions/23536893 / ...
Густаво Semião-Лобо

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
Чому це працює? Яка частина команди - з системою-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

Рішення El Capitan для мене:

$ 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 для встановлення варіння або встановлення дорогоцінних каменів. Це створює проблеми з дозволом.
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/isissue/339

Рішення Jasonlynes, знайдене за цим посиланням, зробило для мене хитрість. нічого іншого не вийшло.

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

1
Я не можу повірити, чому це все ще проблема в 2020 році ... Дякую @ Stefanos.Ioannou, це рішення, яке працювало на мене.
Авраам Мілано

6

Ви можете налаштувати постачальника замість того, щоб знати кожну версію. @ 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без помилок.


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

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/isissue/107

Дякуємо Феліксу Бюнеману за виправлення!


1

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

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

тобто

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

Завдяки відповіді Гаурава Агарваля за те, що вела мене правильним шляхом!


1

Ніщо з цього мені не допомогло ... що б я не робив, мій дорогоцінний камінь 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/isissue/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

Ви можете спробувати скласти та встановити дорогоцінний камінь вручну за допомогою методу, згаданого на сайті gbb libv8.


0

У MAC-Yosemite із середовищем RVM та версією ruby-2.1.1

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

Він працює за допомогою вищевказаної команди, може підтвердити це.


0

Насправді для мене працювало оновлення рубіну до 2.2.0, видалення Gemfile.lock та поновлення знов.

Працював як шарм!


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

0

Я використовував бета-версію Xcode для іншого проекту і забув. Переключитися назад із xcode-select. Щось на зразок:

sudo xcode-select --switch /Applications/Xcode.app/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.