therubyracer - Gem :: Ext :: BuildError: ERROR: No se pudo construir la extensión nativa de la gema

81

Estoy intentando instalar las siguientes versiones de gemas en Mavericks

  • libv8 (3.16.14.3)
  • terubyracer (0.12.1)

Obviamente, las gemas therubyracer dependen de libv8.

1) Instalación de libv8

¿Qué es libv8? Mi poco de investigación parece indicar que es una especie de biblioteca de JavaScript utilizada por Google Chrome.

Tenía problemas para instalarlo, pero esta gran publicación tenía mi error y una respuesta bien explicada sobre cómo evitarlo.

Así que instalé libv8con

gem install libv8 -- --with-system-v8

Tengo entendido que esto instala la gema pero usa la instalación de mi sistema local de la biblioteca v8 en lugar de ... ¿la versión que viene con la gema? De cualquier manera, tuvo éxito.

2) Instalación de therubyracer

Durante el siguiente paso, tuve problemas para instalar therubyracergem. No estoy muy seguro de qué hace esta gema, solo que es una dependencia de un proyecto de rieles que estoy tratando de hacer bundle install.

Me da el siguiente error:

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /Users/jeeves.butler/.rvm/rubies/ruby-1.9.2-p290/bin/ruby extconf.rb 
checking for main() in -lpthread... yes
checking for main() in -lobjc... yes
checking for v8.h... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

Provided configuration options:
    --with-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/Users/jeeves.butler/.rvm/rubies/ruby-1.9.2-p290/bin/ruby
    --with-pthreadlib
    --without-pthreadlib
    --with-objclib
    --without-objclib
    --enable-debug
    --disable-debug
    --with-v8-dir
    --without-v8-dir
    --with-v8-include
    --without-v8-include=${v8-dir}/include
    --with-v8-lib
    --without-v8-lib=${v8-dir}/lib
/Users/jeeves.butler/.rvm/gems/ruby-1.9.2-p290/gems/libv8-3.16.14.3/ext/libv8/location.rb:50:in 
'configure': You have chosen to use the version of V8 found 
on your system (Libv8::Location::System::NotFoundError)
and *not* the one that is bundled with the libv8 rubygem. However,
it could not be located. please make sure you have a version of
v8 that is compatible with 3.16.14.3 installed. You may
need to special --with-v8-dir options if it is in a non-standard
location

thanks,
The Mgmt

    from /Users/jeeves.butler/.rvm/gems/ruby-1.9.2-p290/gems/libv8-3.16.14.3/lib/libv8.rb:7:in `configure_makefile'
    from extconf.rb:32:in `<main>'

extconf failed, exit code 1

Gem files will remain installed in /Users/jeeves.butler/.rvm/gems/ruby-1.9.2-p290/gems/therubyracer-0.12.1 for inspection.
Results logged to /Users/jeeves.butler/.rvm/gems/ruby-1.9.2-p290/extensions/x86_64-darwin-13/1.9.1/therubyracer-0.12.1/gem_make.out

Por lo que puedo reunir, elegí instalar libv8usando mi biblioteca V8 local en lugar de lo que se proporcionó libv8, pero ahora no se pudo ubicar la instalación local.

  • ¿Cómo verifico si realmente tengo V8 instalado y cómo lo ubico?
  • Probé algunos de los indicadores especificados, ninguno de ellos parecía apuntar la gema al directorio de instalación correcto
  • Este podría ser un tema aparte, pero ¿cuál es extconf.rb? Lo he visto en algunos lugares. ¿Y qué está tratando de hacer con el gcccompilador en específico?

¡¡Gracias!!

EDITAR:

  1. Probé esta solución de desinstalar libv8 y reinstalación de vía brew install. También se mencionó en un par de preguntas similares. Sin suerte.

  2. También probé el CC, CXXy CPPvariables de entorno como se describe aquí , aunque no creo que tenga ningún efecto, ya que ya estaba recogiendo mi gcc v4.6compilador.

usuario2490003
fuente
esto esto , tal vez?
Dax
2
<suspiro> Siempre he tenido problemas para instalar therubyracer en un mac = (
maerics

Respuestas:

166

Estos pasos funcionaron para mí.

SO: Maverick Ruby: 2.1.1

gem uninstall libv8
gem install therubyracer -v '0.11.3'
gem install libv8 -v '3.11.8.13' -- --with-system-v8
rider_on_rails
fuente
Aceptando esta respuesta, con un cambio. Cambié los pasos 3 y 2 para que funcione: instale libv8 y luego instale theruby racer. ¡Gracias!
user2490003
Gracias, ¡funcionó a las mil maravillas! Debo estar cansado, pero sería útil si sus instrucciones tuvieran objetos punzantes en lugar de sus números de versión, necesitaba instalar diferentes versiones, pero simplemente copio sus notas.
Taylored Web Sites
Tenga en cuenta que la versión de libv8 es crítica, como se indica aquí que la versión de punto impar (los dos últimos dígitos de la versión) también contiene el binario.
Jimmy Chu
El baile de instalación / desinstalación / reinstalación funcionó para mí en Mojave. ¡Odio estas cosas viejas! : D
paredes vacías
73

Para aquellos que enfrentan este problema en OS X El Capitan, esta solución de un hilo de problemas de therubyracer fue lo que finalmente funcionó para mí:

brew tap homebrew/versions
brew install v8-315

gem install libv8 -v '3.16.14.13' -- --with-system-v8
gem install therubyracer -- --with-v8-dir=/usr/local/opt/v8-315

bundle install

También había corrido brew install gccantes, pero no estoy seguro de si esto era realmente necesario.

Andy Stuhl
fuente
1
Tuve que eliminar mi Gemfile.lock antes de que finalmente funcionara. Gracias por la pista.
abuzze
3
+1, pero para los futuros lectores, querrá hacerlo gem install libv8 -v 'A.B.C.D'según corresponda. Es 3.16.14.15 al momento de escribir este artículo.
Dave Land
1
+1, en caso de que desee instalar una versión específica de therubyracer use:gem install therubyracer -v 'x.x.x' -- --with-v8-dir=/usr/local/opt/v8-315
avital
1
Se parece mucho a la respuesta de jottr. Tal vez lanzarle un grito.
omikes
4
Para mí, el directorio v8 fue: /usr/local/opt/[email protected]
SamuelLJohnson
26

Intente primero desinstalar libv8 gem, luego instale rubyracer y luego libv8

gem uninstall libv8
gem install therubyracer
gem install libv8 -- --with-system-v8
Nikhil
fuente
1
Sin suerte :( Las siguientes líneas del error parecían interesantes: g ++ - 4.6: error: x86_64: No existe tal archivo o directorio g ++ - 4.6: error: opción no reconocida '-arch'
user2490003
1
Descubrí que instalar libv8antes therubyracerfunciona mejor.
Chris Peters
23

La solución de Tertom publicada en github me lo resolvió, después de haber probado todas las demás soluciones propuestas en el problema respectivo de github y aquí.
Tenía exactamente la misma configuración del sistema.
Esto está en el capitan, por lo que no es una respuesta exacta a la pregunta, pero la gente puede encontrar útil esta información.

Lo estoy citando aquí por visibilidad:

Resuelto el mismo problema

  • MacOS 10.11.2
  • rubí 1.9.3
  • libv8 3.16.14.13
  • terubyracer 0.12.2

-

brew tap homebrew/versions  
brew install v8-315  
brew link --force v8-315  
bundle install  
brew unlink v8-315

Si tampoco puede instalar libv8,

gem install libv8 --with-system-v8

o

bundle config build.libv8 --with-system-v8
jottr
fuente
1
Esto funcionó para mí. Descubrí que necesitaba especificar la versión de libv8 gem que rubyracer esperaba instalar.
Paul Sturgess
1
Sí, creo que bundle config build.libv8 --with-system-v8fue la clave para mí. ¡Gracias!
natebeaty
Esto fue lo único que funcionó para mí (y lo intenté a fines de 2019 con Catalina)
Sam Johnson
Muy útil, aunque homebrew / versions estaba en desuso. Mi problema fue que mi enlace actual estaba vinculado a '/ usr / local / bin / d8'. Desvincular eso y correr brew link --force v8-315funcionó para mí. 2/2020 - MacOS 10.15.3. - Ruby versión 1.9.3 - Bundler 1.16.4 - libv8 versión 13.16.14.19
Thomas
12

Para todos ustedes que usan macOS 10.15, brew ha cambiado, por lo que necesitarán ejecutar estos comandos.

brew install v8@3.15
gem install libv8 -v 'YOUR_VERSION' -- --with-system-v8
gem install therubyracer -v 'YOUR_VERSION' -- --with-v8-dir=/usr/local/opt/[email protected]
bundle install
nzajt
fuente
6

Las respuestas anteriores no me funcionaron; mi configuración de empaquetado se ha disable-shared-gemshabilitado, lo que causa problemas adicionales.

Estoy usando Yosemite 10.10.1, Rails 3.2.xy Ruby 1.9.3p550.

El siguiente fragmento de mi me bin/setupha solucionado el problema.

if ! bundle show therubyracer; then
    bundle config build.libv8 --with-system-v8
    gem install --install-dir vendor/bundle libv8 -v 3.16.14.7
    gem install libv8 -v 3.16.14.7
    gem install --install-dir vendor/bundle therubyracer 
fi
Me encanta Italia
fuente
4

Encontré una solución al problema anterior.

Esto es más una compatibilidad entre libv8 y therubyracer.

gem install libv8 -v '3.3.10.4' -- --with-system-v8

gem install therubyracer -v '0.10.2'

Esto debería funcionar bien ya que ambas versiones son compatibles conmigo. Inicialmente, estaba intentando instalar la versión 0.12.0 para therubyracer y estaba enfrentando el problema. Una vez que cambié a la versión 0.10.2, todo funcionó bien.

Mi sistema operativo actual: Mavericks

arpiagar
fuente
3

Tengo este problema MacOS Mojave 10.14.2y pude solucionarlo cuando encontré dónde v8-315se instaló el paquete y cuál era el nombre de la carpeta. En mi caso, fue aquí /usr/local/opt/[email protected].

Para solucionar esto, he ejecutado a continuación:

brew install v8-315
gem install libv8 -v '3.16.14.15' -- --with-system-v
gem install therubyracer -v '0.12.2' -- --with-system-v8 --with-v8-dir=/usr/local/opt/[email protected]
bundle install
Mavka Poltavka
fuente
1

Después de romperme la cabeza durante casi dos días, esto funcionó para mí.

rvm install 2.2.2
gem install rails
bundle install
Sunil Sharma
fuente
1

No pude hacer que therubyracer se compilara en macOS Catalina 10.15 debido a la dependencia de libv8, a pesar de instalar el x64 (variante de 64 bits) de libv8.

La solución para mí fue cambiar de therubyracer a mini_racer, la gema mini_racer instalada (sin necesidad de construir localmente) y, ¡listo! Podría continuar.

¡Intentalo!

Tijeras
fuente
Excepto cuando su proyecto requiera que los archivos LESS se compilen en CSS: /
Martin Carel
1

En mi caso

MacOS: Catalina , Ruby: 2.3.3 , Usando rbenv (no RVM), Necesité la versión de therubyracer: 0.12.3 (No importa)

Probé toda la solución, pero lo que funcionó para mí, por favor, no copie ciegamente la solución de pegar (porque lo hice en mi caso), primero lea y luego cambie las versiones en los siguientes comandos si necesita alguno. La mayoría de los comandos son comunes en la mayoría de las respuestas existentes, pero lo que funcionó para mígem install therubyracer -- --with-v8-dir=$(brew --prefix v8-315) lugar de gem install therubyracer -- --with-v8-dir=/usr/local/opt/v8-315Gracias a Junji Zhi por su comentario en esta respuesta

1. brew install gcc
2. brew tap homebrew/versions   (If it wont work then below 2 steps, for latest MacOS version)
2.a. brew tap brewsci/bio
2.b. brew tap brewsci/science
3. brew install v8-315     (uninstall if v8 installed previously without '-315')
4. gem install libv8 -v '3.16.14.19' -- --with-system-v8   (Be careful with the libv8 version mentioned in this command, replace version number with one required)
5.a. gem install therubyracer -- --with-v8-dir=/usr/local/opt/v8-315    (If it does not work then try below one, In my case below command worked)
5.b. gem install therubyracer -- --with-v8-dir=$(brew --prefix v8-315)

Listo, luego continúe con su bundle install

Nota : Si bien gem install therubyracer , cheque de la versión de libv8 se está instalando, si es diversa de lo que he mencionado en el paso 4 a continuación, su therubyracer no puede instalar, por lo que acaba de hacer una cosa, gem uninstall libv8a continuación, repita el paso 4 por cambiar la versión , lo que puede ver en la consola mientras instala therubyracer

shubham mishra
fuente
1

Esto me ha funcionado:

gem install libv8 -v '3.16.14.17' -- --with-system-v8
brew install v8-315
gem install therubyracer -v '0.12.3' --source 'http://rubygems.org/' -- --with-v8-dir='/usr/local/opt/[email protected]'

Para el último comando, verifique la salida de, brew --prefix v8-315en mi caso, lo fue /usr/local/opt/[email protected].

jmarceli
fuente
-2

Noté que cuando encontramos un problema:

Gem::Ext::BuildError: ERROR: Failed to build gem native extension

A continuación, debe instalar build-essential

sudo apt install build-essential

Me funciona con los problemas de instalación de mini_race.

Adrian
fuente
-3

Acabo de ejecutar la actualización del paquete y funcionó para mí.

Obs .: Usando Ruby 2.3.0

Thiago Rodrigues
fuente