"Gem install therubyracer -v '0.10.2'" en osx mavericks no se instala

90

Intento instalar therubyracer en mavericks usando "gem install therubyracer -v '0.10.2'" pero obtengo el siguiente error:

/Users/dennischen/.rvm/rubies/ruby-1.9.3-p194/bin/ruby extconf.rb
checking for main() in -lobjc... yes
creating Makefile

make
compiling rr.cpp
clang: warning: argument unused during compilation: '-rdynamic'
rr.cpp:48:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
1 warning generated.
compiling v8.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_array.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_callbacks.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_context.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_date.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_debug.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_exception.cpp
clang: warning: argument unused during compilation: '-rdynamic'
v8_exception.cpp:10:16: warning: unused variable 'stack' [-Wunused-variable]
  static void* stack[20];
               ^
1 warning generated.
compiling v8_external.cpp
clang: warning: argument unused during compilation: '-rdynamic'
v8_external.cpp:10:9: warning: unused variable 'references' [-Wunused-variable]
  VALUE references;
        ^
1 warning generated.
compiling v8_function.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_handle.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_locker.cpp
clang: warning: argument unused during compilation: '-rdynamic'
v8_locker.cpp:45:5: warning: control reaches end of non-void function [-Wreturn-type]
    }
    ^
v8_locker.cpp:85:5: warning: control reaches end of non-void function [-Wreturn-type]
    }
    ^
2 warnings generated.
compiling v8_message.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_object.cpp
clang: warning: argument unused during compilation: '-rdynamic'
v8_object.cpp:77:19: warning: unused variable 'proto' [-Wunused-variable]
    Handle<Value> proto(rr_rb2v8(prototype));
                  ^
1 warning generated.
compiling v8_script.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_string.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_template.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_try_catch.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_v8.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_value.cpp
clang: warning: argument unused during compilation: '-rdynamic'
v8_value.cpp:100:9: warning: unused function 'ToInt32' [-Wunused-function]
  VALUE ToInt32(VALUE self) {
        ^
1 warning generated.
compiling v8_weakref.cpp
clang: warning: argument unused during compilation: '-rdynamic'
linking shared-object v8.bundle
clang: error: no such file or directory: '/Users/dennischen/.rvm/gems/ruby-1.9.3-p194@panini/gems/libv8-3.3.10.4/lib/libv8/build/v8/libv8.a'
make: *** [v8.bundle] Error 1

¿Alguien puede ayudarme a descubrir cómo hacer que esta joya funcione? Tengo instaladas las herramientas de línea de comandos.

usuario2711889
fuente
Tienes homebrew? Intente instalar v8 usando brew install v8antes de instalar gem
Ivan Shamatov
Creo que brew install v8 es un problema aparte. Consulte stackoverflow.com/questions/11598655/therubyracer-install-error para obtener detalles sobre v8 con brew.
Ash Blue

Respuestas:

242

Si decide utilizar una therubyracerversión de gema más nueva , ya no tendrá este problema

De otra manera:

brew tap homebrew/dupes # Thanks Tom
brew install 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

brew uninstall v8

gem uninstall libv8

gem install therubyracer -v '0.10.2' # specify version
Julian Popov
fuente
11
Este enfoque parece mejor que modificar enlaces simbólicos
Nilesh
3
brew tap homebrew/dupescorrige "Error: No hay fórmula disponible para apple-gcc42"
TomFuertes
1
Esto FINALMENTE solucionó el problema para mí, ¡gracias! Probé la solución de enlace simbólico de M. Scott Ford a continuación y pareció funcionar, pero arrojó un error cuando en realidad intenté hacer algo (rastrillo, rieles, etc.).
Kyle Fox
2
Su actualización a therubyracer 0.12.0 solucionó este problema para mí.
jackocnr
6
Desafortunadamente, ninguna de estas soluciones me funciona en OSX 10.9, ruby ​​2.1.0 y therubyracer 0.12.1.
turbocargado
16

Así que finalmente lo logré funcionar después de algunos problemas ... gracias a Simon y Alvaro.

Sin embargo, tengo una cosa que agregar, usar la bandera --with-system-v8 no funcionó para mí ... Así que eliminé mi sistema v8 con

brew uninstall v8

Y la carrera

gem install libv8

Si ya ha ejecutado gem install libv8con el indicador del sistema v8, asegúrese de desinstalar esa versión de la gema (hágalo ejecutando gem uninstall libv8). Lo importante es que no debes usar el proporcionado por brew, no parece funcionar en Mavericks (se instala bien y el paquete informará que tu paquete está completo, pero tu aplicación fallará cuando intente usar v8 ).

Para resumir la respuesta, hacer lo siguiente funcionó para mí:

brew install apple-gcc42
sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/gcc-4.2 /usr/bin/gcc
sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/g++-4.2 /usr/bin/g++
sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/cpp-4.2 /usr/bin/cpp

brew uninstall v8
gem install libv8
gem install therubyracer
Damianmr
fuente
2
Esto funcionó para mí. Pero hice un enlace simbólico a gcc en / usr / local / bin y reinicié el terminal para poder eliminarlo después de instalar libv8.
Jamon Holmgren
2
Hacer un enlace simbólico de binarios caseros con esa versión específica, en / usr / bin, es una muy mala idea. El próximo brew updateque llegue y acelere esos caminos te dejará en un estado roto.
mrm
10

Tuve el mismo problema, esto funciona para mí:

therubyracer (0.10.2) y libv8 (3.3.10.4)

Ante todo:

  • brew install apple-gcc42
  • debe vincular todos los archivos binarios de los compiladores ( gcc, cpp, g++) a/usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/<compiler>

Después, puedes probar esto:

  • brew install v8
  • gem install libv8 -v '3.3.10.4' -- --with-system-v8
  • gem install therubyracer -v 'therubyracer'o bundle installen el directorio del proyecto rails.
Álvaro
fuente
apple-gcc42: This formula either does not compile or function as expected on macOS Mi macOS es 10.12.6
Wylliam Judd
7

Sólo tenía el mismo problema y una solución es actualmente el uso de manzana gcc42 en lugar de sonido metálico para compilar las dos gemas:

brew install apple-gcc42

Y luego tiene la opción entre hacer algunos enlaces simbólicos en / usr / bin para los binarios {gcc, g ++, c ++}:

sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/gcc-4.2 /usr/bin/gcc
sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/g++-4.2 /usr/bin/g++
sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/cpp-4.2 /usr/bin/cpp

De hecho, g ++ debería ser suficiente.

O ... podría exportar variables de entorno CC / CXX / CPP con rutas correspondientes a los binarios creados por homebrew. Seguramente es una solución más limpia.

Una tercera solución es descargar Xcode 4.6.3 e instalarlo en la carpeta Aplicaciones . Luego, ingrese en la terminal:

sudo xcode-select --switch /Applications/Xcode4.6.3.app/Contents/Developer
gem install therubyracer

Una vez que se haya instalado la gema, puede volver a Xcode 5.0:

sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
Simón
fuente
¿Cómo cambio el compilador a apple-gcc42?
user2711889
@Simon cuando intento hacer una inclusión simbólica en los compiladores, aparece un mensaje de que el archivo existe. ¿Ese es el archivo clang? Si ejecuto la instalación del paquete, no parece estar usando gcc porque el error está lleno de referencias clang.
isea
Si está usando MacPorts, no tiene que usar un enlace simbólico para apuntar a una versión diferente de GCC, hay un comando incorporado para eso (vea mi respuesta).
jshkol
6

Encontré una solución que funcionó sin instalar apple-gcc42.

Esto funcionará si el mensaje de error que está recibiendo tiene este aspecto:

clang: error: no such file or directory: '/Users/mscottford/.rbenv/versions/1.9.3-p327/lib/ruby/gems/1.9.1/gems/libv8-3.3.10.4/lib/libv8/build/v8/libv8.a'

Entonces debería poder hacer lo siguiente:

brew install v8
bundle install 
# after failing create link from brew installed v8 to error location
ln -s /usr/local/Cellar/v8/3.21.17/lib/libv8_base.x64.a /Users/mscottford/.rbenv/versions/1.9.3-p327/lib/ruby/gems/1.9.1/gems/libv8-3.3.10.4/lib/libv8/build/v8/libv8.a
bundle install

Fuente: https://github.com/cowboyd/therubyracer/issues/277#issuecomment-27734348

M. Scott Ford
fuente
Enorme +1 para este. La gema se instalaría en la CLI pero RubyMine v6 se negaba a instalarla ... configurar este enlace simbólico resolvió el problema finalmente. ¡Gracias!
Oda
1
Este 1000%, salud @ M.ScottFord. Uso rvm y, por lo tanto, mi declaración ln fue la siguiente:ln -s /usr/local/Cellar/v8/3.21.17/lib/libv8_base.x64.a ~/.rvm/gems/ruby-1.9.3-p327/gems/libv8-3.3.10.4/lib/libv8/build/v8/libv8.a
Dave Foster
3

Como se sugiere en muchas respuestas, lo más fácil es compilar las extensiones nativas de Ruby Racer con Apple GCC 4.2 (en lugar de la versión instalada con Xcode).

Si está utilizando MacPorts, no debería tener que lidiar manualmente con la configuración de enlaces simbólicos para los binarios de GCC. El port selectcomando lo hace por ti. Si no ha actualizado MacPorts desde que instaló Mavericks, haga un sudo port selfupdate. Con MacPorts actualizado, intente lo siguiente:

# If you don't have it, install the port for Apple's GCC 4.2
sudo port install apple-gcc42 

    # OR

# If you had apple-gcc42 already (before Mavericks), update it
sudo port upgrade apple-gcc42


# Same result as manual symlinking of GCC in other answers
sudo port select gcc apple-gcc42 && hash -r

# Install therubyracer, will install libv8 gem dependency
#  *note* if you have any existing versions of these gems, remove them
gem install therubyracer

# Restore GCC to system default (optional)
sudo port select gcc none && hash -r

En general, este procedimiento ( sudo port select gcc [version]) funcionará siempre que desee utilizar una versión específica de GCC en lugar de la instalada por Xcode (Apple LLVM v5 para 10.9 Mavericks / Xcode 5).

jshkol
fuente
1
Trabajó para mí en inconformistas.
Evo_x
3

Logro instalar therubyracer 0.12 y libv8 3.16.14.3 en ruby ​​2.0.0p353 y os x 10.9

libv8 requiere gcc42

brew install v8
brew install apple-gcc42
sudo ln -sf /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/gcc-4.2 /usr/bin/gcc
sudo ln -sf /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/g++-4.2 /usr/bin/g++
sudo ln -sf /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/cpp-4.2 /usr/bin/cpp
gem install libv8

therubyracer requiere gcc posterior

brew install gcc49
sudo ln -sf /usr/local/Cellar/gcc49/4.9-20131110/bin/gcc-4.9 /usr/bin/gcc
sudo ln -sf /usr/local/Cellar/gcc49/4.9-20131110/bin/g++-4.9 /usr/bin/g++
sudo ln -sf /usr/local/Cellar/gcc49/4.9-20131110/bin/cpp-4.9 /usr/bin/cpp

Gemfile

gem 'therubyracer', :require => 'v8', :platforms => :ruby

usar en bundlelugar degem install therubyracer

Eugenio
fuente
¡Gracias! Esto finalmente me ayudó a pasar bundle installdespués de días de prueba y error. Lo único que hice de manera diferente fue desinstalar todas las herramientas de desarrollador que fueron instaladas por brewhasta gcc --versionque se informó que era la versión de Apple LLVM y estaba configurada con Xcode, luego moví el existente /usr/bin/gcc(et. Al.) Antes de simular el apple-gcc42 libs, luego, en lugar de instalar gcc49 (la última vez que probé, se hizo cargo de un nuestro para configurarlo), simplemente copié las bibliotecas originales de gcc, g ++ y cpp. Dado que probé 3 docenas de formas diferentes de encontrar la que funcionó para mí, YMMV
Chris Bloom
3

Esta debería ser una forma segura y limpia (sin enlaces simbólicos) de instalar therubyracer para cualquiera que tenga problemas.

Tomado de: gem install therubyracer -v 0.11.4 falla en OS X 10.10

instale Xcode (si aún no tiene una de estas versiones) 6.1.1, 6.2-beta o 6.3-beta y (esta es necesaria) 4.6.3

gem uninstall libv8 si aún no lo has hecho

cambiar a Xcode 4.6.3

sudo xcode-select --switch /Applications/Xcode4.6.3.app/Contents/Developer

gem install libv8 -v '3.11.8.17' O la versión que esté vinculada a su versión de therubyracer

cambie a Xcode 6.1.1, 6.2-beta o 6.3-beta (o si desea probar su instalación actual de Xcode, ajuste esta línea, he confirmado que los 3 funcionan)

sudo xcode-select --switch /Applications/Xcode6.1.1.app/Contents/Developer

gem install therubyracer -v '0.11.4' o la versión que estás intentando instalar.

Travis
fuente
1
Gracias @ th01 esto funcionó para mí ... Intenté todo lo que pude encontrar durante 3 horas ... en mi caso, fue la gema libv8. Descargué Xcode4.6.3 y lo ejecutó con esa versión y se instaló correctamente. Aquí hay un enlace con un tutorial rápido sobre cómo instalar múltiples versiones de Xcode: blogs.oracle.com/mobile/entry/how_to_install_multiple_xcodes
miligraf
Cuando descargo Xcode 4.6.3 y luego ejecuto sudo xcode-select --switch /Applications/Xcode4.6.3.app/Contents/Developery luego ejecuto gem install libv8 -v '3.3.10.4', obtengo: unable to locate xcodebuild, please make sure the path to the Xcode folder is set correctly! ¿Qué estoy haciendo incorrectamente?
Wylliam Judd
1

Tuve un error casi idéntico al intentar instalar therubyracer 0.12.0 para que funcione con libv8. Esto funcionó para mí:

$ brew upgrade gcc

$ gem uninstall therubyracer

$ gem uninstall libv8

$ gem install therubyracer -v '0.12.0'
Fetching: therubyracer-0.12.0.gem (100%)
Building native extensions.  This could take a while...
Successfully installed therubyracer-0.12.0
1 gem installed

$ gem install libv8 -v '3.16.14.3' -- --with-system-v8
Fetching: libv8-3.16.14.3.gem (100%)
Building native extensions with: '--with-system-v8'
This could take a while...
Successfully installed libv8-3.16.14.3
1 gem installed
Javid Jamae
fuente
0

Tuve el mismo problema cuando actualicé de OSX Mountain Lion a OSX Mavericks.

Actualizar de ruby-1.8.7-p354 a ruby-1.8.7-375 funcionó para mí.

Tal vez intente actualizar de ruby ​​1.9.3-p194 a rc1 (1.9.3 está por encima de p484 ahora)

asumiendo que usa rbenv:

rbenv install 1.9.3-rc1
rbenv rehash
rbenv global 1.9.3-rc1
bundle install
nelsonenzo
fuente
0

Tuve este problema después de actualizar de Mavericks a Yosemite. El problema fue que compilé mi versión de Ruby con la versión anterior de OSX.

Si corriera

ruby -rubygems -e 'puts Gem::Platform.new(RUBY_PLATFORM)'

Yo obtendría en x86_64-darwin-13lugar dex86_64-darwin-14 Yosemite.

Para reinstalar Ruby I

  1. Versión antigua completamente eliminada: rvm remove ruby-2.1.1
  2. Reinstalado desde la fuente (el --disable-binary no usa binarios precompilados y fuerza una compilación): rvm reinstall --disable-binary 2.1

Luego pude ejecutar bundle installsin errores después de probar todas las soluciones anteriores.

Moemars
fuente
-2

Lo que hice fue en osx mavericks:

git clone git@github.com:cowboyd/therubyracer.git

Luego:

gem build therubyracer.gemspec
gem install therubyracer-0.12.1.gem

Este procedimiento descargó una versión binaria de libv8 y la instaló.

darmou
fuente