Installazione di libv8 gem su OS X 10.9+


212

Sto cercando di installare libv8 3.16.14.3 ma ricevo un errore su OSX Mavericks usando l'ultima versione stabile di rvm e ruby-1.9.3-p125.

Questo è l'output dell'esecuzione del comando '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

Risposte:


463

Ciò è dovuto al fatto che OS X 10.9+ utilizza la versione 4.8 di GCC. Questo non è supportato ufficialmente nelle versioni precedenti di libv8 come menzionato nella richiesta pull ( https://github.com/cowboyd/libv8/pull/95 ). Si prega di provare ad aumentare la versione di libv8 nel proprio Gemfile (o) bundle updatedovrebbe bastare. Spero che questo ti aiuti.

Dal README di libv8

Porta il tuo V8

Poiché libv8 è l'interfaccia per il motore V8 utilizzato da therubyracer, potrebbe essere necessario utilizzare libv8, anche se V8 è già installato. Se si desidera utilizzare la propria installazione V8, anziché crearla per te, utilizzare l'opzione --with-system-v8.

Utilizzando RubyGems:

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

Utilizzando Bundler (nel tuo Gemfile):

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

Si noti che se si intende eseguire il proprio V8, è necessario installare sia il V8 che le sue intestazioni (disponibile in libv8-dev per le distribuzioni Debian).

Porta il tuo compilatore

È possibile specificare un compilatore di propria scelta impostando la variabile d'ambiente CXX prima della compilazione o aggiungendo l'opzione --with-cxx = alla configurazione del bundle:

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

Modificare:

Se questo problema è causato da therubyracer, prova quanto segue come suggerito da rider_on_rails qui :

gem disinstallare libv8

gem install therubyracer -v YOUR_RUBY_RACER_VERSION

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


Sfortunatamente non posso cambiare la versione di libv8 nel progetto a cui sto lavorando. Per il momento effettuerò il downgrade a OSX 10.8!
tanookiben,

35
--with-system-v8FTW!
JPowell,

24
Grazie! bundle config build.libv8 --with-system-v8 aiuta!
Andrey Skuratovsky,

7
bundle updatemi ha salvato dal regno di intorpidimento e miserie inflitte da upgrade di mela
saihgala

6
Nel caso in cui qualcuno ottenga il seguente problema con therubyracergem dopo aver risolto questo: stackoverflow.com/questions/23536893/…
Gustavo Semiao-Lobo

219

Puoi effettivamente installare quella versione su Mavericks:

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

Posso confermare che funziona con rbenv e ruby ​​1.9.3p448


5
Lo stesso per me - os x 10.9, rbenv and ruby-2.0.0-p247
roo

1
Ha lavorato all'1.8.7 per un vecchio progetto :)
Juan de Dios H.

3
Perché funziona? Quale parte del comando sta modificando --with-system-v8, e cosa sta facendo?
David Krider,

4
Come da istruzioni qui github.com/cowboyd/libv8 libv8 ti consente di utilizzare una versione preesistente del motore V8 ( en.wikipedia.org/wiki/V8_(JavaScript_engine) ) anziché compilarne uno tu stesso. È la compilation che è un problema nei maverick poiché i compilatori C ++ sono cambiati. Puoi compilare libV8 da solo usando le istruzioni qui ( stackoverflow.com/a/19668162/2012130 )
Oliver Shaw,

5
lavora con rbenv e ruby ​​2.1.1 -gem install libv8 -- --with-system-v8
Andrew

35

El Capitan Solution per me:

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

Dov'era REQUIRED_LIBV8_VERSIONper me 3.16.14.7, ma devi controllare qual è quello di cui hai bisogno nel tuo pacchetto (questo era quello per le rotaie 4.2.5)

Potrebbe anche essere necessario eseguire i comandi sopra come superutente (se le gemme e le librerie di sistema sono globali)


4
Non dovresti usare sudo per brew install o gem install. Questo crea problemi di autorizzazione.
bendangelo,

2
@benDangelo, quello che dici è assolutamente corretto. Anche se a volte il sistema potrebbe richiedere i privilegi di root per l'installazione del software, è una cattiva pratica usare sudo su base generale. Modificherò la mia risposta, grazie.
Evgenia Manolova,

Per me funziona! grazie. Questa era l'unica soluzione funzionante.
Charles Hamel,

14

Quando ho provato la risposta accettata, libv8 si installava correttamente con gem install libv8, ma bundle installfalliva su libv8. Penso che bundle installstesse cercando di installare una versione diversa di libv8. Sono stato in grado di trovare una soluzione che funzionasse per me.

Avevo bisogno di libv8 perché il Therubyracer dipende da questo. Per farlo installare, ho notato la versione che non si installava nel gem_make.outregistro per therubyracer. (Il percorso per ilgem_make.out registro sarà nel messaggio di errore.) Nel mio caso era 3.16.14.7. (Questa versione probabilmente cambierà nel tempo, nel caso in cui leggerai questo tra tre anni.) Poi ho fatto questo:

gem install libv8 -v 3.16.14.7 -- --with-v8-lib <- nota un flag diverso dalla risposta accettata

che ha permesso a questo di funzionare:

gem install therubyracer

che mi ha permesso di completare il mio bundle install .

Questo ha funzionato per me su OSX Yosemite.


Dovrei notare che l'installazione del bundle si è interrotta immediatamente dopo l'aggiornamento a OSX Yosemite, motivo per cui ho dovuto trovare questa soluzione.
Steven Hirlston,

Questo funziona perfettamente su OS X Yosemite mentre molte altre risposte semplicemente non funzionano.
Roy Li,

Grazie compagno. 'therubyracer' finalmente installato.
Kiryl Plyashkevich,

8

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

La soluzione di Jasonlynes trovata su quel link mi ha aiutato. qualsiasi altra cosa non ha funzionato.

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
Non riesco a credere perché questo sia ancora un problema nel 2020 ... Grazie @ Stefanos.Ioannou questa è la soluzione che ha funzionato per me.
Abraham Milano,

7

Puoi configurare il bundler invece di dover conoscere ogni versione. @ 3.15 potrebbe essere sostituito con altre versioni.

$ 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
Funziona su macOS Catalina. Grazie!
Aleksandr K.

4

Ho aggiornato a macOS Catalina @ 10.15 e ruby 2.6.5. Dopo un po 'è arrivato libv8e therubyracerper installarlo di nuovo, anche se consiglierei di non aggiornare ancora macOS (ho sentito che rubydovrebbe andare bene).

Innanzitutto, ho dovuto aggiornare XCode

  1. xcode-select --install

Ho usato rbenvper aggiornare rubye impostare rubymanualmente la versione /Users/<username>/.rbenv/versionsu 2.6.5. Anche se questo non dovrebbe importare se il tuo progetto contiene un .ruby-versionfile.

Poi ho ripulito tutta la versione che ho installato fro libv8(di solito in /usr/local/opt/): brew uninstall v8,brew uninstall libv8@3.15

  1. brew install v8@3.15

Ora, seguendo https://github.com/cowboyd/libv8#do-i-get-a-binary , ho installato

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

e quindi potrebbe funzionare bundle installsenza errori.


4

Il mio problema è da therubyracerquando, quando l'aggiornamento a macOS 10.15eruby-2.6.5

E il seguente funziona per me:

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

Ho avuto lo stesso problema quando sono passato da OSX Mountain Lion a OSX Mavericks. La risposta accettata ha funzionato per libv8, ma non quando sono andato al bundle install therubyracer gem.

L'aggiornamento da ruby-1.8.7-p354 a ruby-1.8.7-375 ha fatto il trucco per me. libv8 (3.16.14.3-x86_64-darwin-13) e le gemme therubyracer (0.12.0) installate senza problemi.

supponendo che tu usi 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

Questo ha funzionato bene per me:

Prova a installare questo gioiello precompilato:

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

O se preferisci crearne uno tuo:

  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

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

Grazie a Felix Bünemann per la correzione!


1

Ho provato una serie di soluzioni descritte nelle risposte precedenti, ma ho scoperto che l'esecuzione del bundle (per installare altre gemme mancanti) avrebbe tentato di ricompilare libv8 (nonostante l'avesse già installato con successo usando --with-system-v8 ) e quindi soffrisse dello stesso problema.

Alla fine, ho scoperto che rimuovere la gemma libv8, recuperare il file gem da rubygems e quindi installare manualmente il .gemfile con il --with-system-v8flag ha funzionato per me.

vale a dire

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

Grazie alla risposta di Gaurav Agarwal per avermi condotto sulla strada giusta!


1

Niente di tutto ciò mi ha aiutato ... qualunque cosa facessi, la mia gemma di installazione di therubyracer continuava a lamentarsi di questo errore:

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

Ciò che alla fine mi ha aiutato è stato questo altro forum su cui mi sono imbattuto in https://www.bountysource.com/issues/82833405-libv8-fails-to-build-on-catalina-10-15

L'ultima soluzione che ha funzionato per me:

Ho dovuto aggiungere queste righe al mio file .zshrc:

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

Quindi ho dovuto eseguire questi comandi:

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

Spero che qualcun altro lo trovi utile!



0

In MAC-Yosemite con ambiente RVM e versione ruby-2.1.1

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

Funziona con l'aiuto del comando sopra, può confermare questo.


0

Ciò che ha funzionato davvero per me è stato l'aggiornamento di ruby ​​alla 2.2.0, la rimozione di Gemfile.lock e il raggruppamento di nuovo.

Ha funzionato come un fascino!


0

Questo è ciò che ha funzionato per me.

sostituisci 3.16.14.7con la tua versione.

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

questo costringe un vecchio gcc, che sarebbe un aiuto di fascia nella migliore delle ipotesi e causerebbe sicuramente problemi lungo la strada.
Jim Wrubel,

0

Ho riscontrato un problema simile su El Cap. Ecco cosa ho fatto.

brew tap homebrew/dupes
brew install apple-gcc42

E poi,

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

Finalmente,

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

0

Stavo usando una versione beta di Xcode per un altro progetto e avevo dimenticato. Torna indietro con xcode-select. Qualcosa di simile a:

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

-6

Rimuovi dal Gemfile:

gemma 'therubyracer',: platform =>: ruby


2
Questo tipo di sconfigge l'intero scopo di questo post.
Dan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.