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:
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í:
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
yx86_64-darwin-12
), RubyGems está capturando la versión incorrecta detherubyracer
ylibv8
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
Pude hacer que las cosas volvieran a funcionar ejecutando gem install libv8 -v ''3.16.14.3'' -- --with-system-v8
.
Referencia: https://github.com/cowboyd/libv8/issues/120
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