Installation de libv8 gem sur OS X 10.9+

212

J'essaie d'installer libv8 3.16.14.3 mais j'obtiens une erreur sur OSX Mavericks en utilisant les derniers rvm stables et ruby-1.9.3-p125.

Voici la sortie de l'exécution de la commande '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
la source

Réponses:

463

Cela est dû au fait que OS X 10.9+ utilise la version 4.8 de GCC. Ceci n'est pas officiellement pris en charge dans les anciennes versions de libv8 comme mentionné dans la demande de pull ( https://github.com/cowboyd/libv8/pull/95 ). Veuillez essayer d'augmenter la version de libv8 dans votre Gemfile (ou) bundle updatedevrait suffire. J'espère que cela t'aides.

Depuis le LISEZMOI libv8

Apportez votre propre V8

Étant donné que libv8 est l'interface du moteur V8 utilisé par therubyracer, vous devrez peut-être utiliser libv8, même si vous avez déjà installé V8. Si vous souhaitez utiliser votre propre installation V8, plutôt que de la faire construire pour vous, utilisez l'option --with-system-v8.

Utilisation de RubyGems:

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

Utilisation de Bundler (dans votre Gemfile):

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

Veuillez noter que si vous avez l'intention d'exécuter votre propre V8, vous devez installer à la fois la V8 et ses en-têtes (trouvés dans libv8-dev pour les distributions Debian).

Apportez votre propre compilateur

Vous pouvez spécifier un compilateur de votre choix en définissant la variable d'environnement CXX avant la compilation, ou en ajoutant l'option --with-cxx = à la configuration du bundle:

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

Éditer:

Si ce problème est provoqué par therubyracer, essayez ce qui suit comme suggéré par rider_on_rails ici :

gem désinstallation libv8

gem install therubyracer -v YOUR_RUBY_RACER_VERSION

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

Gaurav Agarwal
la source
Malheureusement, je ne peux pas changer la version de libv8 dans le projet sur lequel je travaille. Je vais passer à OSX 10.8 pour l'instant!
tanookiben
35
--with-system-v8FTW!
JPowell
24
Merci! bundle config build.libv8 --with-system-v8 aide!
Andrey Skuratovsky
7
bundle updatem'a
libéré
6
Au cas où quelqu'un aurait le problème suivant avec therubyracergem après avoir résolu celui-ci: stackoverflow.com/questions/23536893/…
Gustavo Semião-Lobo
219

Vous pouvez réellement installer cette version sur Mavericks:

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

Je peux confirmer que cela fonctionne avec rbenv et ruby ​​1.9.3p448

Oliver Shaw
la source
5
Même chose pour moi - OS x 10.9, rbenv et ruby-2.0.0-p247
roo
1
A travaillé sur 1.8.7 pour un ancien projet :)
Juan de Dios H.
3
Pourquoi ça marche? Quelle partie de la commande modifie --with-system-v8, et que fait-elle?
David Krider
4
Selon les instructions ici, github.com/cowboyd/libv8 libv8 vous permet d'utiliser une version préexistante du moteur V8 ( en.wikipedia.org/wiki/V8_(JavaScript_engine) ) plutôt que d'en compiler une vous-même. C'est la compilation qui pose problème dans les non-conformistes car les compilateurs C ++ ont changé. Vous pouvez compiler libV8 vous-même en utilisant les instructions ici ( stackoverflow.com/a/19668162/2012130 )
Oliver Shaw
5
fonctionne avec rbenv et ruby ​​2.1.1 -gem install libv8 -- --with-system-v8
Andrew
35

Solution El Capitan pour moi:

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

Où était REQUIRED_LIBV8_VERSIONpour moi 3.16.14.7, mais vous devez vérifier lequel est celui dont vous avez besoin dans votre bundle (c'était celui pour les rails 4.2.5)

Vous devrez peut-être également exécuter les commandes ci-dessus en tant que superutilisateur (si vos gemmes et bibliothèques système sont globales)

Evgenia Manolova
la source
4
Vous ne devez pas utiliser sudo pour l'installation de brassage ou l'installation de gemmes. Cela crée des problèmes d'autorisation.
bendangelo
2
@benDangelo, ce que vous dites est absolument correct. Même si le système peut parfois nécessiter des privilèges root pour installer un logiciel, c'est une mauvaise pratique d'utiliser sudo sur une base générale. Je vais modifier ma réponse, merci.
Evgenia Manolova
Ça marche pour moi! Merci. C'était la seule solution de travail.
Charles Hamel
14

Lorsque j'essayais la réponse acceptée, libv8 s'installait avec succès gem install libv8, mais bundle installéchouait sur libv8. Je pense que bundle installj'essayais d'installer une version différente de libv8. J'ai pu trouver une solution qui fonctionnait pour moi.

J'avais besoin de libv8 car le therubyracer en dépend. Pour le faire installer, j'ai noté la version qui ne parvenait pas à installer dans le gem_make.outjournal de therubyracer. (Le chemin du gem_make.outjournal sera dans le message d'échec.) Dans mon cas, c'était 3.16.14.7. (Cette version changera probablement au fil du temps, au cas où vous liriez ceci dans trois ans.) Ensuite, j'ai fait ceci:

gem install libv8 -v 3.16.14.7 -- --with-v8-lib <- noter un indicateur différent de la réponse acceptée

ce qui a permis que cela fonctionne:

gem install therubyracer

ce qui m'a permis de terminer mon bundle install.

Cela a fonctionné pour moi sur OSX Yosemite.

Steven Hirlston
la source
Je dois noter que l'installation du bundle s'est interrompue pour moi immédiatement après ma mise à niveau vers OSX Yosemite, c'est pourquoi j'ai dû trouver cette solution.
Steven Hirlston
Cela fonctionne parfaitement sur OS X Yosemite tandis que de nombreuses autres réponses ne fonctionnent tout simplement pas.
Roy Li
Merci mon pote. 'therubyracer' enfin installé.
Kiryl Plyashkevich
8

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

La solution de jasonlynes trouvée sur ce lien a fait l'affaire pour moi. rien d'autre n'a fonctionné.

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
la source
1
Je ne peux pas croire pourquoi c'est toujours un problème en 2020 ... Merci @ Stefanos.Ioannou c'est la solution qui a fonctionné pour moi.
Abraham Milano
7

Vous pouvez configurer bundler au lieu d'avoir à connaître chaque version. @ 3.15 pourrait être remplacé par d'autres versions.

$ brew install [email protected]
$ bundle config build.libv8 --with-system-v8
$ bundle config build.therubyracer --with-v8-dir=$(brew --prefix [email protected])
$ bundle install
Peter DeWeese
la source
1
Fonctionne sur macOS Catalina. Je vous remercie!
Aleksandr K.
4

J'ai mis à jour vers macOS Catalina @ 10.15 et ruby 2.6.5. Après un certain temps obtenu libv8et therubyracerd'installer à nouveau, bien que je vous recommande de ne pas mettre à jour macOS encore (j'ai entenduruby devrait être bien).

J'ai d'abord dû mettre à jour XCode

  1. xcode-select --install

Je rbenvà la mise à jour ruby, et de définir la la rubyversion manuellement /Users/<username>/.rbenv/versionpour 2.6.5. Bien que cela ne soit pas important si votre projet contient un .ruby-versionfichier.

Ensuite , je nettoyais une version que j'ai installé en arrière libv8(généralement /usr/local/opt/): brew uninstall v8,brew uninstall [email protected]

  1. brew install [email protected]

Maintenant, en suivant https://github.com/cowboyd/libv8#do-i-get-a-binary , j'ai installé

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

puis pourrait fonctionner bundle installsans erreurs.

chriszo111
la source
4

Mon problème est depuis therubyracer, lors de la mise à jour vers macOS 10.15etruby-2.6.5

Et ce qui suit fonctionne pour moi:

brew install [email protected]

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

gem install therubyracer -- --with-v8-dir=/usr/local/opt/[email protected]
Alan Wang
la source
1

J'ai eu ce même problème lors de la mise à niveau d'OSX Mountain Lion vers OSX Mavericks. La réponse acceptée a fonctionné pour libv8, mais pas lorsque je suis allé installer bundle therubyracer gem.

La mise à niveau de ruby-1.8.7-p354 à ruby-1.8.7-375 a fait l'affaire pour moi. libv8 (3.16.14.3-x86_64-darwin-13) et les gemmes therubyracer (0.12.0) installés sans problème.

en supposant que vous utilisez 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
la source
1

CA marchait bien pour moi:

Essayez d'installer ce bijou précompilé:

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

Ou si vous préférez construire le vôtre:

  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

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

Merci à Felix Bünemann pour le correctif!

Tilo
la source
1

J'ai essayé un certain nombre de solutions décrites dans les réponses précédentes, mais j'ai constaté que l'exécution du bundle (pour installer d'autres gemmes manquantes) tenterait de recompiler libv8 (malgré l'avoir déjà installé avec succès en utilisant --with-system-v8 ) et souffrait donc du même problème.

Finalement, j'ai trouvé que la suppression de la gem libv8, la récupération du fichier gem de rubygems, puis l'installation manuelle du .gemfichier avec l' --with-system-v8indicateur fonctionnaient pour moi.

c'est à dire

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

Merci à la réponse de Gaurav Agarwal de m'avoir conduit sur la bonne voie!

XtraSimplicity
la source
1

Rien de tout cela ne m'a aidé ... peu importe ce que j'ai fait, mon installation de gem de therubyracer se plaignait toujours de cette erreur:

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

Ce qui m'a finalement aidé, c'est cet autre forum sur lequel je suis tombé sur https://www.bountysource.com/issues/82833405-libv8-fails-to-build-on-catalina-10-15

La solution finale qui a fonctionné pour moi:

J'ai dû ajouter ces lignes à mon fichier .zshrc:

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

Ensuite, j'ai dû exécuter ces commandes:

source ~/.zshrc
brew tap homebrew/homebrew-core
brew install [email protected]
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/[email protected]
bundle install

J'espère que quelqu'un d'autre trouve cela utile!

Tom Chapin
la source
0

Vous pouvez essayer de compiler et d'installer manuellement la gemme via la méthode mentionnée sur le site github libv8.

RonanOD
la source
0

Dans MAC-Yosemite avec environnement RVM et version ruby-2.1.1

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

Il fonctionne à l'aide de la commande ci-dessus, peut le confirmer.

Kishore Mohan
la source
0

Ce qui a vraiment fonctionné pour moi, c'est la mise à niveau de ruby ​​vers 2.2.0, la suppression de Gemfile.lock et le regroupement à nouveau.

A fonctionné comme un charme!

tomascharad
la source
0

C'est ce qui a fonctionné pour moi.

remplacez 3.16.14.7par votre version.

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
Arian Faurtosh
la source
cela oblige un ancien gcc, qui serait au mieux un pansement et causera certainement des problèmes en cours de route.
Jim Wrubel
0

J'ai rencontré un problème similaire sur El Cap. Voici ce que j'ai fait.

brew tap homebrew/dupes
brew install apple-gcc42

Puis,

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

Finalement,

brew uninstall v8
gem install libv8 -v 3.11.8.17 -- --with-system-v8
bittterbotter
la source
0

J'utilisais une version bêta de Xcode pour un autre projet et j'avais oublié. Revenez avec xcode-select. Quelque chose comme:

sudo xcode-select --switch /Applications/Xcode.app/
huwr
la source
-6

Supprimer du Gemfile:

gem 'therubyracer',: plates-formes =>: rubis

Roberto Capelo
la source
2
Ce genre de défait le but de cet article.
Dan