"Gem install therubyracer -v '0.10.2'" sur les mavericks osx ne s'installant pas

90

Essayer d'installer therubyracer sur des non-conformistes en utilisant "gem install therubyracer -v '0.10.2'" mais j'obtiens l'erreur suivante:

/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

quelqu'un peut-il m'aider à comprendre comment faire fonctionner ce bijou? J'ai installé les outils de ligne de commande.

user2711889
la source
Avez-vous homebrew? Essayez d'installer la v8 en utilisant brew install v8avant d'installer gem
Ivan Shamatov
Je pense que l'installation de brew v8 est un problème distinct. Veuillez consulter stackoverflow.com/questions/11598655/therubyracer-install-error pour plus de détails sur la v8 avec brew.
Ash Blue

Réponses:

242

Si vous décidez d'utiliser une therubyracerversion plus récente de gem, vous n'aurez plus ce problème

Autrement:

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
la source
11
Cette approche semble meilleure que la modification des liens symboliques
Nilesh
3
brew tap homebrew/dupescorrige "Erreur: aucune formule disponible pour apple-gcc42"
TomFuertes
1
Cela a finalement résolu le problème pour moi - merci! J'ai essayé la solution de lien symbolique de M. Scott Ford ci-dessous et cela a semblé fonctionner, mais j'ai renvoyé une erreur lorsque j'ai essayé de faire quoi que ce soit (râteau, rails, etc.).
Kyle Fox
2
Votre mise à jour vers therubyracer 0.12.0 a résolu ce problème pour moi.
jackocnr
6
Malheureusement, aucune de ces solutions ne fonctionne pour moi sur OSX 10.9, ruby ​​2.1.0 et therubyracer 0.12.1.
turboladen
16

Donc je l'ai finalement fait fonctionner après quelques difficultés ... grâce à Simon et Alvaro.

J'ai une chose à ajouter cependant, l'utilisation du drapeau --with-system-v8 n'a pas fonctionné pour moi ... J'ai donc supprimé mon système v8 avec

brew uninstall v8

Et la course

gem install libv8

Si vous avez déjà exécuté gem install libv8avec l'indicateur système v8, assurez-vous de désinstaller cette version de gem (faites-le en exécutant gem uninstall libv8). L'important est que vous ne devriez pas utiliser celui fourni par brew, cela ne semble pas fonctionner dans Mavericks (il est bien installé et le bundler signalera que votre bundle est complet, mais votre application échouera quand elle essaiera d'utiliser la v8 ).

Pour résumer la réponse, faire ce qui suit a fonctionné pour moi:

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
la source
2
Cela a fonctionné pour moi. Mais j'ai lié gcc dans / usr / local / bin et j'ai redémarré le terminal pour pouvoir le supprimer après avoir installé libv8.
Jamon Holmgren
2
La liaison symétrique des binaires homebrew avec cette version spécifique, dans / usr / bin, est une très mauvaise idée. Le prochain brew updatequi arrive et tourne ces chemins vous laissera dans un état cassé.
mrm
10

J'ai eu le même problème, cela fonctionne pour moi:

therubyracer (0.10.2) et libv8 (3.3.10.4)

Tout d'abord:

  • brew install apple-gcc42
  • vous devez lier tous les fichiers binaires des compilateurs ( gcc, cpp, g++) à/usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/<compiler>

Après, vous pouvez essayer ceci:

  • brew install v8
  • gem install libv8 -v '3.3.10.4' -- --with-system-v8
  • gem install therubyracer -v 'therubyracer'ou bundle installdans le répertoire du projet rails.
Alvaro
la source
apple-gcc42: This formula either does not compile or function as expected on macOS Mon macOS est le 10.12.6
Wylliam Judd
7

J'ai juste eu le même problème et une solution est actuellement d'utiliser apple-gcc42 au lieu de clang pour compiler les deux gemmes:

brew install apple-gcc42

Et puis vous avez le choix entre faire des liens symboliques dans / usr / bin pour les binaires {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

En fait, g ++ devrait suffire.

Ou ... vous pouvez exporter des variables d'environnement CC / CXX / CPP avec des chemins correspondant aux binaires créés par homebrew. C'est sûrement une solution de contournement plus propre.

Une troisième solution consiste à télécharger Xcode 4.6.3 et à l'installer dans le dossier Applications . Ensuite, entrez dans le terminal:

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

Une fois la gemme installée, vous pouvez revenir à Xcode 5.0:

sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
Simon
la source
Comment basculer le compilateur vers apple-gcc42?
user2711889
@Simon quand j'essaye de symlinc aux compilateurs je reçois un message indiquant que le fichier existe. Est-ce le fichier clang? Si j'exécute l'installation groupée, il ne semble pas utiliser gcc car l'erreur est pleine de références clang.
isea
Si vous utilisez MacPorts, vous n'avez pas besoin de lien symbolique pour pointer vers une version différente de GCC, il existe une commande intégrée pour cela (voir ma réponse).
jshkol
6

J'ai trouvé une solution de contournement qui fonctionnait sans installer apple-gcc42.

Cela fonctionnera si le message d'erreur que vous recevez ressemble à ceci:

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'

Ensuite, vous devriez pouvoir effectuer les opérations suivantes:

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

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

M. Scott Ford
la source
Énorme +1 pour celui-ci. Le gem s'installait sur la CLI mais RubyMine v6 refusait de l'installer ... la définition de ce lien symbolique a finalement résolu le problème. Merci!
Ode
1
Ces 1000%, bravo @ M.ScottFord. J'utilise rvm et donc ma déclaration ln était la suivante: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

Comme suggéré dans de nombreuses réponses, la chose la plus simple à faire est de compiler les extensions natives de The Ruby Racer avec Apple GCC 4.2 (au lieu de la version installée avec Xcode).

Si vous utilisez MacPorts, vous ne devriez pas avoir à configurer manuellement les liens symboliques pour les binaires GCC. La port selectcommande le fait pour vous. Si vous n'avez pas mis à jour MacPorts depuis l'installation de Mavericks, effectuez un sudo port selfupdate. Avec MacPorts à jour, essayez ce qui suit:

# 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 général, cette procédure ( sudo port select gcc [version]) fonctionnera chaque fois que vous souhaiterez utiliser une version spécifique de GCC au lieu de celle installée par Xcode (Apple LLVM v5 pour 10.9 Mavericks / Xcode 5).

jshkol
la source
1
A travaillé pour moi sur des non-conformistes.
Evo_x
3

J'arrive à installer therubyracer 0.12 et libv8 3.16.14.3 sur ruby ​​2.0.0p353 et os x 10.9

libv8 nécessite 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 nécessite plus tard gcc

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

utiliser bundleau lieu degem install therubyracer

Eugène
la source
Merci! Cela m'a finalement dépassé bundle installaprès des jours d'essais et d'erreurs. La seule chose que j'ai faite différemment a été de désinstaller tous les outils de développement qui ont été installés par brewjusqu'à gcc --versionce qu'il soit signalé qu'il s'agissait de la version Apple LLVM et qu'il était configuré avec Xcode, puis j'ai déplacé l'existant /usr/bin/gcc(et al.) Avant de créer un lien symbolique sur le apple-gcc42 libs, puis au lieu d'installer gcc49 (la dernière fois que j'ai essayé, il a fallu configurer un our), je viens de copier les bibliothèques d'origine gcc, g ++ et cpp. Étant donné que j'ai essayé 3 douzaines de façons différentes de trouver celle qui a fonctionné pour moi, YMMV
Chris Bloom
3

Cela devrait être un moyen sûr et propre (pas de liens symboliques) d'installer therubyracer pour quiconque a des problèmes.

Tiré de: gem install therubyracer -v 0.11.4 échoue sur OS X 10.10

installez Xcode (si vous n'avez pas déjà une de ces versions) 6.1.1, 6.2-beta ou 6.3-beta et (celle-ci est nécessaire) 4.6.3

gem uninstall libv8 si vous ne l'avez pas déjà fait

passer à Xcode 4.6.3

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

gem install libv8 -v '3.11.8.17' Ou selon la version qui est liée à votre version de therubyracer

passez à Xcode 6.1.1, 6.2-beta ou 6.3-beta (ou si vous voulez essayer votre installation actuelle de Xcode, ajustez cette ligne, j'ai confirmé que les 3 fonctionnent)

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

gem install therubyracer -v '0.11.4' ou la version que vous essayez d'installer.

Travis
la source
1
Merci @ th01 cela a fonctionné pour moi ... J'ai essayé tout ce que j'ai pu trouver pendant 3 heures ... dans mon cas, c'était le joyau libv8. Téléchargé Xcode4.6.3 et l'exécute avec cette version et il a été installé avec succès. Voici un lien avec un tutoriel rapide sur la façon d'installer plusieurs versions de Xcode: blogs.oracle.com/mobile/entry/how_to_install_multiple_xcodes
miligraf
Lorsque je télécharge Xcode 4.6.3 puis que je l' sudo xcode-select --switch /Applications/Xcode4.6.3.app/Contents/Developerexécute puis que gem install libv8 -v '3.3.10.4'je l' exécute, j'obtiens: unable to locate xcodebuild, please make sure the path to the Xcode folder is set correctly! Que fais-je de manière incorrecte?
Wylliam Judd
1

J'ai eu une erreur presque identique en essayant d'installer therubyracer 0.12.0 pour le faire fonctionner avec libv8. Cela a fonctionné pour moi:

$ 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
la source
0

J'ai eu ce même problème lorsque j'ai mis à niveau OSX Mountain Lion vers OSX Mavericks.

La mise à niveau de ruby-1.8.7-p354 vers ruby-1.8.7-375 a fait l'affaire pour moi.

Essayez peut-être de passer de ruby ​​1.9.3-p194 à rc1 (1.9.3 est au-dessus de p484 maintenant)

en supposant que vous utilisez rbenv:

rbenv install 1.9.3-rc1
rbenv rehash
rbenv global 1.9.3-rc1
bundle install
Nelsonenzo
la source
0

J'ai eu ce problème après la mise à niveau de Mavericks vers Yosemite. Le problème était que j'avais compilé ma version Ruby avec l'ancienne version d'OSX.

Si je courais

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

J'obtiendrais la x86_64-darwin-13place de x86_64-darwin-14Yosemite.

Pour réinstaller Ruby I

  1. Ancienne version complètement supprimée: rvm remove ruby-2.1.1
  2. Réinstallé à partir des sources (le --disable-binary n'utilise pas de binaires pré-compilés et force une construction): rvm reinstall --disable-binary 2.1

Ensuite, j'ai pu courir bundle installsans erreur après avoir essayé toutes les solutions ci-dessus.

Moemars
la source
-2

Ce que j'ai fait, c'est sur osx mavericks:

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

Ensuite:

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

Cette procédure a téléchargé une version binaire de libv8 et l'a installée.

Darmou
la source