gcc rubygems v8 therubyracer libv8

gcc - Solución de la instalación de therubyracer/libv8(0.12.1) en Mavericks



rubygems (7)

OK, estoy al final de mi atadura con esto. Hay algunas preguntas similares, pero todas se refieren a therubyracer 0.10, y en su mayoría concluyen que el problema se puede solucionar actualizando a 0.12.

Estoy teniendo problemas similares, pero cuando uso 0.12.

Preguntas similares

Estoy teniendo problemas al usar gcc ''estándar'' (xcode?), Y tanto apple-gcc42 como gcc de homebrew. He intentado ambos, --with-system-v8 y --without-system-v8 , y nuevamente, no hay dados.

Aquí hay algunos registros:

Empezando desde cero…

$ cd ~/Documents/code/website $ rvm gemset empty $ ruby -v ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin10.8.0] $ grep rubyracer Gemfile gem ''therubyracer'', ''~> 0.12.0'' $ brew list | grep v8 $ cat ~/.bundle/config $ cat .bundle/config BUNDLE_BIN: bin $ $CXX $ $CPP $ $CC $ which gcc /usr/bin/gcc $ which g++ /usr/bin/g++ $ g++ -v Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with- gxx-include-dir=/usr/include/c++/4.2.1 Apple LLVM version 5.1 (clang-503.0.38) (based on LLVM 3.4svn) Target: x86_64-apple-darwin13.0.0 Thread model: posix

Intente una instalación de paquete

Installing libv8 (3.16.14.3) Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension. /Users/chris/.rvm/rubies/ruby-1.9.3-p448/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 ../src/cached-powers.cc:136:18: error: unused variable ''kCachedPowersLength'' [-Werror,-Wunused-const-variable] static const int kCachedPowersLength = ARRAY_SIZE(kCachedPowers); ^ 1 error generated. make[1]: *** [/Users/chris/.rvm/gems/ruby-1.9.3-p448@website/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/cached-powers.o] Error 1 make: *** [x64.release] Error 2 /Users/chris/.rvm/gems/ruby-1.9.3-p448@website/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/chris/.rvm/gems/ruby-1.9.3-p448@website/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/chris/.rvm/gems/ruby-1.9.3-p448@website/gems/libv8-3.16.14.3/ext/libv8/location.rb:35:in `each'' from /Users/chris/.rvm/gems/ruby-1.9.3-p448@website/gems/libv8-3.16.14.3/ext/libv8/location.rb:35:in `verify_installation!'' from /Users/chris/.rvm/gems/ruby-1.9.3-p448@website/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/chris/.rvm/gems/ruby-1.9.3-p448@website/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/allocation.o CXX(target) /Users/chris/.rvm/gems/ruby-1.9.3-p448@website/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/atomicops_internals_x86_gcc.o CXX(target) /Users/chris/.rvm/gems/ruby-1.9.3-p448@website/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/bignum.o CXX(target) /Users/chris/.rvm/gems/ruby-1.9.3-p448@website/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/bignum-dtoa.o CXX(target) /Users/chris/.rvm/gems/ruby-1.9.3-p448@website/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/cached-powers.o Gem files will remain installed in /Users/chris/.rvm/gems/ruby-1.9.3-p448@website/gems/libv8-3.16.14.3 for inspection. Results logged to /Users/chris/.rvm/gems/ruby-1.9.3-p448@website/gems/libv8-3.16.14.3/ext/libv8/gem_make.out An error occurred while installing libv8 (3.16.14.3), and Bundler cannot continue.

Malos tiempos.

El mensaje de error informa que se recomienda gcc 4.4+. Podemos hacerlo.

$ export CXX=/usr/local/Cellar/gcc48/4.8.2/bin/g++-4.8 $ export CPP=/usr/local/Cellar/gcc48/4.8.2/bin/cpp-4.8 $ export CC=/usr/local/Cellar/gcc48/4.8.2/bin/gcc-4.8 $ which $CXX /usr/local/Cellar/gcc48/4.8.2/bin/g++-4.8 $ which $CPP /usr/local/Cellar/gcc48/4.8.2/bin/cpp-4.8 $ which $CC /usr/local/Cellar/gcc48/4.8.2/bin/gcc-4.8 $ bundle install … Installing libv8 (3.16.14.3) Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension. /Users/chris/.rvm/rubies/ruby-1.9.3-p448/bin/ruby extconf.rb creating Makefile Compiling v8 for x64 Using python 2.7.5 Using compiler: /usr/local/Cellar/gcc48/4.8.2/bin/g++-4.8 g++-4.8: error: unrecognized command line option ''-Wnewline-eof'' make[1]: *** [/Users/chris/.rvm/gems/ruby-1.9.3-p448@website/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/allocation.o] Error 1 make: *** [x64.release] Error 2 /Users/chris/.rvm/gems/ruby-1.9.3-p448@website/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/chris/.rvm/gems/ruby-1.9.3-p448@website/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/chris/.rvm/gems/ruby-1.9.3-p448@website/gems/libv8-3.16.14.3/ext/libv8/location.rb:35:in `each'' from /Users/chris/.rvm/gems/ruby-1.9.3-p448@website/gems/libv8-3.16.14.3/ext/libv8/location.rb:35:in `verify_installation!'' from /Users/chris/.rvm/gems/ruby-1.9.3-p448@website/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/chris/.rvm/gems/ruby-1.9.3-p448@website/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/allocation.o Gem files will remain installed in /Users/chris/.rvm/gems/ruby-1.9.3-p448@website/gems/libv8-3.16.14.3 for inspection. Results logged to /Users/chris/.rvm/gems/ruby-1.9.3-p448@website/gems/libv8-3.16.14.3/ext/libv8/gem_make.out An error occurred while installing libv8 (3.16.14.3), and Bundler cannot continue. Make sure that `gem install libv8 -v ''3.16.14.3''` succeeds before bundling.

Peores tiempos!

DE ACUERDO. Así que para solucionar los problemas con therubyracer 0.10, algunas personas recomiendan instalar v8 y luego decirle a los rubygems que usen el sistema v8. ¡Veamos qué pasa!

$ brew install v8 ==> Downloading https://github.com/v8/v8/archive/3.21.17.tar.gz Already downloaded: /Library/Caches/Homebrew/v8-3.21.17.tar.gz ==> Checking out http://gyp.googlecode.com/svn/trunk ==> make native -j4 library=shared snapshot=on console=readline i18nsupport=off 🍺 /usr/local/Cellar/v8/3.21.17: 21 files, 27M, built in 3.4 minutes $ cat ~/.bundle/config --- BUNDLE_BUILD__LIBV8: --with-system-v8 $ bundle install … Installing therubyracer (0.12.1) Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension. /Users/chris/.rvm/rubies/ruby-1.9.3-p448/bin/ruby extconf.rb checking for main() in -lpthread... yes checking for main() in -lobjc... yes checking for v8.h... yes creating Makefile make compiling accessor.cc clang: warning: argument unused during compilation: ''-rdynamic'' In file included from accessor.cc:1: ./rr.h:463:14: error: no type named ''AccessorGetter'' in namespace ''v8'' inline v8::AccessorGetter accessorGetter() {return &AccessorGetter;} ~~~~^ ./rr.h:464:14: error: no type named ''AccessorSetter'' in namespace ''v8'' inline v8::AccessorSetter accessorSetter() {return RTEST(set) ? &AccessorSetter : 0;} ~~~~^ ./rr.h:466:14: error: no type named ''NamedPropertyGetter'' in namespace ''v8'' inline v8::NamedPropertyGetter namedPropertyGetter() {return &NamedPropertyGetter;} ~~~~^ ./rr.h:467:14: error: no type named ''NamedPropertySetter'' in namespace ''v8'' inline v8::NamedPropertySetter namedPropertySetter() {return RTEST(set) ? &NamedPropertySetter : 0;} ~~~~^ ./rr.h:468:14: error: no type named ''NamedPropertyQuery'' in namespace ''v8'' inline v8::NamedPropertyQuery namedPropertyQuery() {return RTEST(query) ? &NamedPropertyQuery : 0;} ~~~~^ ./rr.h:469:14: error: no type named ''NamedPropertyDeleter'' in namespace ''v8'' inline v8::NamedPropertyDeleter namedPropertyDeleter() {return RTEST(deleter) ? &NamedPropertyDeleter : 0;} ~~~~^ ./rr.h:470:14: error: no type named ''NamedPropertyEnumerator'' in namespace ''v8'' inline v8::NamedPropertyEnumerator namedPropertyEnumerator() {return RTEST(enumerator) ? &NamedPropertyEnumerator : 0;} ~~~~^ ./rr.h:472:14: error: no type named ''IndexedPropertyGetter'' in namespace ''v8'' inline v8::IndexedPropertyGetter indexedPropertyGetter() {return &IndexedPropertyGetter;} ~~~~^ ./rr.h:473:14: error: no type named ''IndexedPropertySetter'' in namespace ''v8'' inline v8::IndexedPropertySetter indexedPropertySetter() {return RTEST(set) ? &IndexedPropertySetter : 0;} ~~~~^ ./rr.h:474:14: error: no type named ''IndexedPropertyQuery'' in namespace ''v8'' inline v8::IndexedPropertyQuery indexedPropertyQuery() {return RTEST(query) ? &IndexedPropertyQuery : 0;} ~~~~^ ./rr.h:475:14: error: no type named ''IndexedPropertyDeleter'' in namespace ''v8'' inline v8::IndexedPropertyDeleter indexedPropertyDeleter() {return RTEST(deleter) ? &IndexedPropertyDeleter : 0;} ~~~~^ ./rr.h:476:14: error: no type named ''IndexedPropertyEnumerator'' in namespace ''v8'' inline v8::IndexedPropertyEnumerator indexedPropertyEnumerator() {return RTEST(enumerator) ? &IndexedPropertyEnumerator : 0;} ~~~~^ ./rr.h:482:16: error: no type named ''AccessorInfo'' in namespace ''v8''; did you mean ''Accessor''? Info(const v8::AccessorInfo& info); ^~~~~~~~~~~~~~~~ Accessor ./rr.h:456:7: note: ''Accessor'' declared here class Accessor { ^ ./rr.h:488:18: error: no type named ''AccessorInfo'' in namespace ''v8''; did you mean ''Accessor''? inline const v8::AccessorInfo* operator->() {return this->info;} ^~~~~~~~~~~~~~~~ Accessor ./rr.h:456:7: note: ''Accessor'' declared here class Accessor { ^ ./rr.h:502:11: error: no type named ''AccessorInfo'' in namespace ''v8''; did you mean ''Accessor''? const v8::AccessorInfo* info; ^~~~~~~~~~~~~~~~ Accessor ./rr.h:456:7: note: ''Accessor'' declared here class Accessor { ^ ./rr.h:506:85: error: no type named ''AccessorInfo'' in namespace ''v8''; did you mean ''Accessor''? static v8::Handle<v8::Value> AccessorGetter(v8::Local<v8::String> property, const v8::AccessorInfo& info); ^~~~~~~~~~~~~~~~ Accessor ./rr.h:456:7: note: ''Accessor'' declared here class Accessor { ^ ./rr.h:507:96: error: no type named ''AccessorInfo'' in namespace ''v8''; did you mean ''Accessor''? static void AccessorSetter(v8::Local<v8::String> property, v8::Local<v8::Value> value, const v8::AccessorInfo& info); ^~~~~~~~~~~~~~~~ Accessor ./rr.h:456:7: note: ''Accessor'' declared here class Accessor { ^ ./rr.h:509:90: error: no type named ''AccessorInfo'' in namespace ''v8''; did you mean ''Accessor''? static v8::Handle<v8::Value> NamedPropertyGetter(v8::Local<v8::String> property, const v8::AccessorInfo& info); ^~~~~~~~~~~~~~~~ Accessor ./rr.h:456:7: note: ''Accessor'' declared here class Accessor { ^ ./rr.h:510:118: error: no type named ''AccessorInfo'' in namespace ''v8''; did you mean ''Accessor''? static v8::Handle<v8::Value> NamedPropertySetter(v8::Local<v8::String> property, v8::Local<v8::Value> value, const v8::AccessorInfo& info); ^~~~~~~~~~~~~~~~ Accessor ./rr.h:456:7: note: ''Accessor'' declared here class Accessor { ^ fatal error: too many errors emitted, stopping now [-ferror-limit=] 20 errors generated. make: *** [accessor.o] Error 1 Gem files will remain installed in /Users/chris/.rvm/gems/ruby-1.9.3-p448/gems/therubyracer-0.12.1 for inspection. Results logged to /Users/chris/.rvm/gems/ruby-1.9.3-p448/gems/therubyracer-0.12.1/ext/v8/gem_make.out An error occurred while installing therubyracer (0.12.1), and Bundler cannot continue. Make sure that `gem install therubyracer -v ''0.12.1''` succeeds before bundling.

Completamente rascándome la cabeza, y ya desperdicié horas en esto. Si puedes detectar lo que está mal y ayudarme a solucionarlo, serás mi héroe (ine) para siempre.


El mismo problema con OSX 10.9.3 , ruby 2.1.3 y todas las versiones de therubyracer .

Ahora estoy dejando que execjs (dependiente de uglifier gem) se encargue de ello.

ExecJS te permite ejecutar código JavaScript desde Ruby. Selecciona automáticamente el mejor tiempo de ejecución disponible para evaluar su programa de JavaScript, luego le devuelve el resultado como un objeto Ruby.

Usuarios de OSX

"Apple JavaScriptCore" viene como predeterminado para el tiempo de ejecución JS en OSX. Solo instalando execjs resolveremos el problema.

Usuarios de linux

Instala node.js. La gema de Execjs elegirá automáticamente node.js como js runtime.

sudo apt-get install nodejs

Más información sobre github:

https://github.com/sstephenson/execjs


Este problema ya no existe en la última versión de therubyracer ( therubyracer ).

bundle update therubyracer


OK, así que esto ya está ordenado.

Para futuras personas con el mismo problema, sufría que Ruby se construyera contra una instalación anterior de OS X.

Arreglado completamente por rvm y empezando desde cero, aunque imagino que solo podrías desinstalar / reinstalar el rubí ofensivo.

Más detalles sobre cómo se resolvió el problema aquí:

https://github.com/cowboyd/libv8/issues/120


Podría ser que rubygems esté rubygems los binarios incorrectos para su sistema.

Diagnóstico:

  • Compare la salida de la gem env platform con la ''Versión del kernel'' en  > About This Mac > System Report > Software
  • Si esos no coinciden (p. Ej., La Kernel Version: 14.4.0 y x86_64-darwin-12 ), RubyGems está capturando la versión incorrecta de therubyracer y libv8 para su sistema

Fijar:

  • a corto plazo: bundle update therubyracer --platform=x86_64-darwin-14

Pude continuar con ruby ​​racer después de rm Gemfile.lock Quizás intente esto, que es más fácil que la opción de bomba nuclear RVM.

de antemano: instalé v8 a través de brew install v8 , y luego hice gem install libv8 -v ''3.16.14.3'' -- --with-system-v8

y estoy corriendo 10.10 Yosemite



Tuve este mismo problema cuando actualicé OSX Mountain Lion a OSX Mavericks. El nivel de parche de rubí 1.8.7 aparentemente importa.

La actualización de ruby-1.8.7-p354 a ruby-1.8.7-375 hizo el truco por mí.

libv8 (3.16.14.3-x86_64-darwin-13) y las gemas therubyracer (0.12.0) instaladas sin problema.

asumiendo que usas 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