Installation von libv8 gem unter OS X 10.9+


212

Ich versuche, libv8 3.16.14.3 zu installieren, erhalte jedoch einen Fehler unter OSX Mavericks mit dem neuesten stabilen RVM und Ruby-1.9.3-p125.

Dies ist die Ausgabe des Befehls '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

Antworten:


463

Dies liegt an der Tatsache, dass OS X 10.9+ Version 4.8 von GCC verwendet. Dies wird in älteren Versionen von libv8 nicht offiziell unterstützt, wie in der Pull-Anfrage ( https://github.com/cowboyd/libv8/pull/95 ) angegeben. Bitte versuchen Sie, die Version von libv8 in Ihrer Gemfile (oder) zu starten, bundle updatedie ausreichen sollte. Hoffe das hilft.

Aus der libv8 README

Bringen Sie Ihren eigenen V8 mit

Da libv8 die Schnittstelle für die von therubyracer verwendete V8-Engine ist, müssen Sie möglicherweise libv8 verwenden, auch wenn Sie V8 bereits installiert haben. Wenn Sie Ihre eigene V8-Installation verwenden möchten, anstatt sie für Sie erstellen zu lassen, verwenden Sie die Option --with-system-v8.

Verwenden von RubyGems:

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

Verwenden von Bundler (in Ihrer Gemfile):

Bundle-Konfiguration build.libv8 --with-system-v8

Bitte beachten Sie, dass Sie, wenn Sie Ihr eigenes V8 ausführen möchten, sowohl V8 als auch dessen Header installieren müssen (in libv8-dev für Debian-Distributionen enthalten).

Bringen Sie Ihren eigenen Compiler mit

Sie können einen Compiler Ihrer Wahl angeben, indem Sie entweder die CXX-Umgebungsvariable vor dem Kompilieren festlegen oder der Bundle-Konfiguration die Option --with-cxx = hinzufügen:

Bundle-Konfiguration build.libv8 --with-cxx = clang ++

Bearbeiten:

Wenn dieses Problem durch verursacht wird therubyracer, versuchen Sie Folgendes, wie von rider_on_rails hier vorgeschlagen :

gem deinstallieren libv8

gem install therubyracer -v YOUR_RUBY_RACER_VERSION

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


Leider kann ich die Version von libv8 in dem Projekt, an dem ich arbeite, nicht ändern. Ich werde vorerst auf OSX 10.8 herunterstufen!
Tanookiben

35
--with-system-v8FTW!
JPowell

24
Vielen Dank! bundle config build.libv8 --with-system-v8 hilft!
Andrey Skuratovsky

7
bundle updaterettete mich aus dem Reich der Taubheit und des Apfel-Upgrade-zugefügten Elends
Saihgala

6
Für den Fall, dass jemand therubyracernach dem Lösen dieses Problems das folgende Problem mit Gem
Gustavo Semião-Lobo

219

Sie können diese Version tatsächlich auf Mavericks installieren:

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

Ich kann bestätigen, dass dies mit rbenv und ruby ​​1.9.3p448 funktioniert


5
Gleiches gilt für mich - OS X 10.9, Rbenv und Ruby-2.0.0-P247
Roo

1
Arbeitete am 1.8.7 für ein altes Projekt :)
Juan de Dios H.

3
Warum funktioniert das? Welcher Teil des Befehls ändert --with-system-v8 und was macht er?
David Krider

4
Gemäß den Anweisungen hier können Sie mit github.com/cowboyd/libv8 libv8 eine bereits vorhandene Version der V8-Engine ( en.wikipedia.org/wiki/V8_(JavaScript_engine ) verwenden, anstatt selbst eine zu kompilieren. Es ist die Kompilierung, die bei Außenseitern ein Problem darstellt, da sich die C ++ - Compiler geändert haben. Sie können libV8 selbst anhand der Anweisungen hier kompilieren ( stackoverflow.com/a/19668162/2012130 )
Oliver Shaw

5
arbeitet mit rbenv und ruby ​​2.1.1 -gem install libv8 -- --with-system-v8
Andrew

35

El Capitan Lösung für mich:

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

Wo REQUIRED_LIBV8_VERSIONfür mich war 3.16.14.7, aber Sie müssen überprüfen, welches das ist, das Sie in Ihrem Bündel benötigen (dies war das für Schienen 4.2.5)

Möglicherweise müssen Sie auch die obigen Befehle als Superuser ausführen (wenn Ihre Gems und Systembibliotheken global sind).


4
Sie sollten sudo nicht für die Brau- oder Edelsteininstallation verwenden. Dies führt zu Berechtigungsproblemen.
Bendangelo

2
@benDangelo, was du sagst ist absolut richtig. Obwohl das System manchmal Root-Rechte für die Installation von Software benötigt, ist es eine schlechte Praxis, sudo allgemein zu verwenden. Ich werde meine Antwort bearbeiten, danke.
Evgenia Manolova

Für mich geht das! Danke. Dies war die einzige funktionierende Lösung.
Charles Hamel

14

Wenn ich die akzeptierte Antwort versuchte, wurde libv8 erfolgreich mit installiert gem install libv8, schlug jedoch bundle installunter libv8 fehl. ich denke, dassbundle install das hat versucht, eine andere Version von libv8 zu installieren. Ich konnte eine Lösung finden, die für mich funktioniert.

Ich brauchte libv8, weil therubyracer davon abhängt. Um es zu installieren, habe ich die Version notiert, die im gem_make.outProtokoll für therubyracer nicht installiert werden konnte. (Der Weg für diegem_make.out Protokoll befindet sich in der Fehlermeldung.) In meinem Fall war es 3.16.14.7. (Diese Version wird sich wahrscheinlich im Laufe der Zeit ändern, falls Sie dies in drei Jahren lesen.) Dann habe ich Folgendes getan:

gem install libv8 -v 3.16.14.7 -- --with-v8-lib <- Beachten Sie eine andere Flagge als die akzeptierte Antwort

was dies funktionierte:

gem install therubyracer

was mir erlaubte, meine zu vervollständigen bundle install .

Dies funktionierte für mich unter OSX Yosemite.


Ich sollte beachten, dass die Bundle-Installation für mich sofort nach dem Upgrade auf OSX Yosemite fehlgeschlagen ist, weshalb ich diese Lösung finden musste.
Steven Hirlston

Dies funktioniert hervorragend unter OS X Yosemite, während viele andere Antworten einfach nicht funktionieren.
Roy Li

Danke Kumpel. 'therubyracer' endlich installiert.
Kiryl Plyashkevich

8

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

Die auf diesem Link gefundene Lösung von Jasonlynes machte den Trick für mich. alles andere hat nicht funktioniert.

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
Ich kann nicht glauben, warum dies im Jahr 2020 immer noch ein Problem ist ... Danke @ Stefanos. Ioannou, dies ist die Lösung, die für mich funktioniert hat.
Abraham Milano

6

Sie können den Bundler konfigurieren, anstatt jede Version kennen zu müssen. @ 3.15 könnte durch andere Versionen ersetzt werden.

$ 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
Funktioniert unter macOS Catalina. Danke dir!
Aleksandr K.

4

Ich habe auf macOS Catalina @ 10.15 und aktualisiert ruby 2.6.5. Nach einer Weile bekam libv8und wieder therubyracerzu installieren, obwohl ich empfehlen würde, macOS noch nicht zu aktualisieren (ich hörte, rubysollte in Ordnung sein).

Zuerst musste ich XCode aktualisieren

  1. xcode-select --install

Ich habe früher rbenvaktualisiert rubyund die rubyVersion manuell /Users/<username>/.rbenv/versionauf eingestellt 2.6.5. Dies sollte jedoch keine Rolle spielen, wenn Ihr Projekt eine .ruby-versionDatei enthält .

Dann habe ich jede Version bereinigt, die ich installiert habe libv8(normalerweise in /usr/local/opt/) : brew uninstall v8,brew uninstall libv8@3.15

  1. brew install v8@3.15

Nach https://github.com/cowboyd/libv8#do-i-get-a-binary habe ich nun installiert

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

und könnte dann bundle installfehlerfrei laufen .


4

Mein Problem ist seit therubyracerdem Update auf macOS 10.15undruby-2.6.5

Und folgendes funktioniert für mich:

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

Ich hatte das gleiche Problem, als ich ein Upgrade von OSX Mountain Lion auf OSX Mavericks durchführte. Die akzeptierte Antwort funktionierte für libv8, aber nicht, als ich die Installation von therubyracer gem bündelte.

Ein Upgrade von Ruby-1.8.7-p354 auf Ruby-1.8.7-375 hat mir geholfen. libv8 (3.16.14.3-x86_64-darwin-13) und die Therubyracer (0.12.0) Edelsteine ​​wurden problemlos installiert.

Angenommen, Sie verwenden 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

Das hat bei mir gut funktioniert:

Versuchen Sie, dieses vorkompilierte Juwel zu installieren:

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

Oder wenn Sie es vorziehen, Ihre eigenen zu bauen:

  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

Quelle: https://github.com/cowboyd/libv8/issues/107

Vielen Dank an Felix Bünemann für das Update!


1

Ich habe eine Reihe von Lösungen ausprobiert, die in früheren Antworten beschrieben wurden, aber festgestellt, dass das Ausführen des Bundles (zum Installieren anderer, fehlender Edelsteine) versuchen würde, libv8 neu zu kompilieren (obwohl es bereits erfolgreich installiert wurde --with-system-v8 ) und daher unter demselben Problem leidet.

Schließlich stellte ich fest, dass das Entfernen des libv8-Gems, das Abrufen der Gem-Datei aus Rubygems und das manuelle Installieren der .gemDatei mit dem --with-system-v8Flag für mich funktionierte.

dh

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

Vielen Dank an Gaurav Agarwals Antwort, dass er mich auf den richtigen Weg geführt hat!


1

Nichts davon half mir ... egal was ich tat, meine Edelsteininstallation von Therubyracer beschwerte sich immer wieder über diesen Fehler:

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

Was mir letztendlich geholfen hat, war dieses andere Forum, auf das ich unter https://www.bountysource.com/issues/82833405-libv8-fails-to-build-on-catalina-10-15 gestoßen bin

Die endgültige Lösung, die für mich funktioniert hat:

Ich musste diese Zeilen zu meiner .zshrc-Datei hinzufügen:

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

Dann musste ich folgende Befehle ausführen:

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

Ich hoffe, jemand anderes findet das nützlich!



0

In MAC-Yosemite mit RVM-Umgebung und Ruby-2.1.1-Version

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

Es funktioniert mit Hilfe des obigen Befehls, kann dies bestätigen.


0

Was für mich wirklich funktionierte, war das Upgrade von Ruby auf 2.2.0, das Entfernen von Gemfile.lock und das erneute Bündeln.

Lief wie am Schnürchen!


0

Das hat bei mir funktioniert.

durch 3.16.14.7deine Version ersetzen .

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

dies zwingt einen älteren gcc, was bestenfalls ein Pflaster wäre und definitiv Probleme in der Zukunft verursachen wird.
Jim Wrubel

0

Ich habe ein ähnliches Problem mit El Cap gehabt. Folgendes habe ich getan.

brew tap homebrew/dupes
brew install apple-gcc42

Und dann,

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

Schließlich,

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

0

Ich habe eine Beta-Version von Xcode für ein anderes Projekt verwendet und vergessen. Wechseln Sie zurück mit xcode-select. Etwas wie:

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

-6

Aus Gemfile entfernen:

Edelstein 'Therubyracer' ,: Plattformen =>: Rubin


2
Diese Art besiegt den gesamten Zweck dieses Beitrags.
Dan
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.