Instalar libv8 gem en OS X 10.9+

212

Estoy tratando de instalar libv8 3.16.14.3 pero obtengo un error en OSX Mavericks usando el último rvm estable y ruby-1.9.3-p125.

Este es el resultado de ejecutar el 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
tanookiben
fuente

Respuestas:

463

Esto se debe al hecho de que OS X 10.9+ está utilizando la versión 4.8 de GCC. Esto no se admite oficialmente en versiones anteriores de libv8 como se menciona en la solicitud de extracción ( https://github.com/cowboyd/libv8/pull/95 ). Intenta aumentar la versión de libv8 en tu Gemfile (o) a bundle updatedebería ser suficiente. Espero que esto ayude.

Desde el archivo Léame libv8

Trae tu propio V8

Debido a que libv8 es la interfaz para el motor V8 utilizado por therubyracer, es posible que deba usar libv8, incluso si ya tiene instalado V8. Si desea utilizar su propia instalación de V8, en lugar de tenerla construida para usted, use la opción --with-system-v8.

Usando RubyGems:

gem install libv8 [-v TU_VERSIÓN] - --with-system-v8

Usando Bundler (en su Gemfile):

paquete de configuración build.libv8 --with-system-v8

Tenga en cuenta que si tiene la intención de ejecutar su propio V8, debe instalar V8 y sus encabezados (que se encuentran en libv8-dev para las distribuciones de Debian).

Trae tu propio compilador

Puede especificar un compilador de su elección configurando la variable de entorno CXX antes de la compilación o agregando la opción --with-cxx = a la configuración del paquete:

paquete de configuración build.libv8 --with-cxx = clang ++

Editar:

Si este problema es provocado por therubyracer, intente lo siguiente como lo sugiere rider_on_rails aquí :

gema desinstalar libv8

gem install therubyracer -v YOUR_RUBY_RACER_VERSION

gem install libv8 -v TU_VERSIÓN - --with-system-v8

Gaurav Agarwal
fuente
Lamentablemente, no puedo cambiar la versión de libv8 en el proyecto en el que estoy trabajando. ¡Voy a bajar a OSX 10.8 por ahora!
tanookiben
35
--with-system-v8FTW!
JPowell
24
¡Gracias! bundle config build.libv8 --with-system-v8 ayuda!
Andrey Skuratovsky
77
bundle updateme sacó del reino de la insensibilidad y las miserias infligidas por la actualización de la manzana
saihgala
66
En caso de que alguien tenga el siguiente problema con la therubyracergema después de resolver este problema: stackoverflow.com/questions/23536893/…
Gustavo Semião-Lobo
219

De hecho, puede instalar esa versión en Mavericks:

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

Puedo confirmar que esto funciona con rbenv y ruby ​​1.9.3p448

Oliver Shaw
fuente
55
Lo mismo para mí - os x 10.9, rbenv y ruby-2.0.0-p247
roo
1
Trabajó en 1.8.7 para un proyecto antiguo :)
Juan de Dios H.
3
¿Por qué funciona esto? ¿Qué parte del comando está modificando --with-system-v8 y qué está haciendo?
David Krider
44
Según las instrucciones aquí, github.com/cowboyd/libv8 libv8 le permite utilizar una versión preexistente del motor V8 ( en.wikipedia.org/wiki/V8_(JavaScript_engine) ) en lugar de compilar uno usted mismo. La compilación es un problema en los rebeldes, ya que los compiladores de C ++ han cambiado. Puede compilar libV8 usted mismo utilizando las instrucciones aquí ( stackoverflow.com/a/19668162/2012130 )
Oliver Shaw
55
funciona con rbenv y ruby ​​2.1.1 -gem install libv8 -- --with-system-v8
Andrew
35

El Capitan Solution para mi:

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

Dónde estaba REQUIRED_LIBV8_VERSIONpara mí 3.16.14.7, pero debe verificar cuál es el que necesita en su paquete (este fue el de los rieles 4.2.5)

También es posible que deba ejecutar los comandos anteriores como superusuario (si sus gemas y bibliotecas del sistema son globales)

Evgenia Manolova
fuente
44
No debe usar sudo para la instalación de cerveza o la instalación de gemas. Esto crea problemas de permisos.
bendangelo
2
@benDangelo, lo que dices es absolutamente correcto. Aunque el sistema a veces puede requerir privilegios de root para instalar software, es una mala práctica usar sudo de manera general. Editaré mi respuesta, gracias.
Evgenia Manolova
¡Esto funciona para mi! gracias. Esta fue la única solución de trabajo.
Charles Hamel el
14

Cuando probé la respuesta aceptada, libv8 se instaló con éxito gem install libv8, pero bundle installfalló en libv8. Creo que bundle installestaba tratando de instalar una versión diferente de libv8. Pude encontrar una solución que funcionó para mí.

Necesitaba libv8 porque therubyracer depende de ello. Para que se instale, noté la versión que no se pudo instalar en el gem_make.outregistro de therubyracer. (La ruta para el gem_make.outregistro estará en el mensaje de error). En mi caso, era 3.16.14.7. (Esta versión probablemente cambiará con el tiempo, en caso de que esté leyendo esto dentro de tres años). Luego hice esto:

gem install libv8 -v 3.16.14.7 -- --with-v8-lib <- observe una bandera diferente de la respuesta aceptada

lo que permitió que esto funcionara:

gem install therubyracer

lo que me permitió completar mi bundle install .

Esto funcionó para mí en OSX Yosemite.

Steven Hirlston
fuente
Debo señalar que la instalación del paquete se rompió para mí inmediatamente después de actualizar a OSX Yosemite, por lo que tuve que encontrar esta solución.
Steven Hirlston
Esto funciona de manera brillante en OS X Yosemite, mientras que muchas otras respuestas simplemente no funcionan.
Roy Li
Gracias amigo. 'therubyracer' finalmente instalado.
Kiryl Plyashkevich
8

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

La solución de jasonlynes encontrada en ese enlace me sirvió. cualquier otra cosa no funcionó.

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
fuente
1
No puedo creer por qué esto sigue siendo un problema en 2020 ... Gracias @ Stefanos.Ioannou, esta es la solución que funcionó para mí.
Abraham Milano
6

Puede configurar el paquete en lugar de tener que conocer cada versión. @ 3.15 podría reemplazarse con otras versiones.

$ 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
fuente
1
Funciona en macOS Catalina. ¡Gracias!
Aleksandr K.
4

Actualicé a macOS Catalina @ 10.15 y ruby 2.6.5. Después de un tiempo consiguió libv8e therubyracerinstalar nuevamente, aunque recomendaría no actualizar macOS todavía (escuché que rubydebería estar bien).

Primero, tuve que actualizar XCode

  1. xcode-select --install

He utilizado rbenvpara la actualización rubyy ajuste su rubyversión manualmente en /Users/<username>/.rbenv/versiona 2.6.5. Aunque esto no debería importar si su proyecto contiene un .ruby-versionarchivo.

Luego limpié cualquier versión que he instalado lado a otro libv8(por lo general en /usr/local/opt/): brew uninstall v8,brew uninstall [email protected]

  1. brew install [email protected]

Ahora, siguiendo https://github.com/cowboyd/libv8#do-i-get-a-binary , instalé

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

y luego podría ejecutarse bundle installsin errores.

chriszo111
fuente
4

Mi problema es desde entonces therubyracer, cuando actualizo macOS 10.15yruby-2.6.5

Y lo siguiente funciona para mí:

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
fuente
1

Tuve el mismo problema cuando actualicé de OSX Mountain Lion a OSX Mavericks. La respuesta aceptada funcionó para libv8, pero no cuando fui a instalar la gema therubyracer.

La actualización de ruby-1.8.7-p354 a ruby-1.8.7-375 hizo el truco para mí. libv8 (3.16.14.3-x86_64-darwin-13) y las gemas therubyracer (0.12.0) instaladas sin problema.

suponiendo que use 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
fuente
1

Esto funcionó bien para mi:

Intenta instalar esta gema precompilada:

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

O si prefieres construir el tuyo:

  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

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

¡Gracias a Felix Bünemann por la solución!

Tilo
fuente
1

Intenté una serie de soluciones descritas en respuestas anteriores, pero descubrí que ejecutar bundle (para instalar otras gemas faltantes) intentaría volver a compilar libv8 (a pesar de haberlo instalado correctamente usando --with-system-v8 ) y sufrir el mismo problema.

Finalmente, descubrí que eliminar la gema libv8, recuperar el archivo de gema de rubygems y luego instalar manualmente el .gemarchivo con el--with-system-v8 bandera funcionó para mí.

es decir

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

¡Gracias a la respuesta de Gaurav Agarwal por guiarme por el camino correcto!

XtraSimplicity
fuente
1

Nada de esto me ayudó ... no importa lo que hice, mi instalación de gemas de therubyracer seguía quejándose con este error:

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

Lo que finalmente me ayudó fue este otro foro con el que me topé en https://www.bountysource.com/issues/82833405-libv8-fails-to-build-on-catalina-10-15

La solución final que funcionó para mí:

Tuve que agregar estas líneas a mi archivo .zshrc:

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

Luego tuve que ejecutar estos comandos:

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

¡Espero que alguien más encuentre esto útil!

Tom Chapin
fuente
0

En MAC-Yosemite con entorno RVM y versión ruby-2.1.1

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

Funciona con la ayuda del comando anterior, puede confirmar esto.

Kishore Mohan
fuente
0

Lo que realmente funcionó para mí fue actualizar Ruby a 2.2.0, eliminar Gemfile.lock y agruparlo nuevamente.

¡Trabajado como un encanto!

tomascharad
fuente
0

Esto es lo que funcionó para mí.

Reemplace 3.16.14.7con su versión.

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
fuente
esto obliga a un gcc más antiguo, que sería una curita en el mejor de los casos y definitivamente causará problemas en el futuro.
Jim Wrubel
0

Me he enfrentado a un problema similar en El Cap. Esto es lo que hice.

brew tap homebrew/dupes
brew install apple-gcc42

Y entonces,

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
Bittterbotter
fuente
0

Estaba usando una versión beta de Xcode para otro proyecto y lo había olvidado. Cambiar de nuevo con xcode-select. Algo como:

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

Eliminar de Gemfile:

gema 'therubyracer',: plataformas =>: rubí

Roberto Capelo
fuente
2
Este tipo de derrota todo el propósito de esta publicación.
Dan