web-dev-qa-db-fra.com

therubyracer - Gem :: Ext :: BuildError: ERROR: Echec de la création de l'extension native de gem

J'essaie d'installer les versions suivantes de gem sur Mavericks

  • libv8 (3.16.14.3)
  • therubyracer (0.12.1)

Les gemmes thubyracer dépendent évidemment de libv8.

1) Installation de libv8

Qu'est-ce que libv8? Mes recherches semblent indiquer que c'est une sorte de bibliothèque javascript utilisée par Google Chrome.

J'avais du mal à l'installer, mais ce super post avait à la fois mon erreur et une réponse bien expliquée sur la manière de la contourner.

J'ai donc installé libv8 avec

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

Si j'ai bien compris, cela installe la gem mais utilise l'installation de la bibliothèque v8 sur mon système local au lieu de ... la version fournie avec la gem? De toute façon, c'était réussi.

2) Installation de therubyracer

Lors de l'étape suivante, j'ai eu du mal à installer therubyracer gem. Je ne suis pas tout à fait sûr de ce que fait ce joyau, mais simplement qu'il s'agit d'une dépendance d'un Rails que j'essaie de bundle install.

Cela me donne l'erreur suivante:

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

D'après ce que je peux rassembler, j'ai choisi d'installer libv8 en utilisant ma bibliothèque V8 locale au lieu de celle fournie avec libv8 _, mais cette installation locale n'a pas pu être localisée.

  • Comment puis-je vérifier si j'ai bien installé V8 et comment le localiser?
  • J'ai essayé quelques-uns des drapeaux spécifiés, aucun d'entre eux ne semblait indiquer la gemme au bon répertoire d'installation.
  • Cela pourrait être un sujet séparé, mais qu'est-ce que extconf.rb? Je l'ai vu à quelques endroits. Et qu'est-ce qu'il essaie de faire avec le compilateur gcc en particulier?

Merci!!

EDIT:

  1. J'ai essayé cette solution de désinstaller libv8 et de le réinstaller via brew install. Cela a également été mentionné dans quelques questions similaires. Pas de chance.

  2. J'ai aussi essayé les variables d'environnement CC, CXX et CPP comme décrit ici , bien que je ne pense pas que cela ait un effet était déjà ramasser mon gcc v4.6 compilateur.

72
user2490003

Cette démarche a fonctionné pour moi.

Système d'exploitation: 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
160
rider_on_rails

Pour ceux confrontés à ce problème dans OS X El Capitan, cette solution à partir d'un fil de discussion thérubyracer était ce qui a finalement fonctionné pour moi:

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

J'avais aussi couru brew install gcc _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Et je ne suis pas sûr que cela soit réellement nécessaire.

68
Andy Stuhl

Essayez d’abord de désinstaller libv8 gem, puis installez rubyracer, puis libv8

gem uninstall libv8
gem install therubyracer
gem install libv8 -- --with-system-v8
26
Nikhil

Tertom's solution posté sur github l'a résolu pour moi, après avoir essayé toutes les autres solutions proposées sur le respect question de github et ici.
J'avais exactement la même configuration système.
Ceci est sur el capitan, donc pas une réponse exacte à la question, mais les gens pourraient trouver cette information utile.

Je le cite ici pour plus de visibilité:

Résolu le même problème

  • MacOS 10.11.2
  • Ruby 1.9.3
  • libv8 3.16.14.13
  • therubyracer 0.12.2

-

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

Si vous ne pouvez pas non plus installer libv8,

gem install libv8 --with-system-v8

ou

bundle config build.libv8 --with-system-v8
17
jottr

Les réponses ci-dessus n'ont pas fonctionné pour moi; ma config bundler a disable-shared-gems activé ce qui provoque des problèmes supplémentaires.

J'utilise Yosemite 10.10.1, Rails 3.2.x, et Ruby 1.9.3p550.

L'extrait suivant dans mon bin/setup a résolu le problème pour moi.

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
6
iloveitaly

J'ai trouvé une solution de contournement au problème ci-dessus.

C'est plus une compatibilité entre libv8 et therubyracer.

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

gem install therubyracer -v '0.10.2'

Cela devrait fonctionner correctement car les deux versions sont compatibles avec moi. Au départ, j'essayais d'installer la version 0.12.0 pour therubyracer et je faisais face au problème. Une fois que je suis passé à la version 0.10.2, tout a bien fonctionné.

Mon OS actuel: Mavericks

4
arpiagar

J'ai ce numéro pour MacOS Mojave 10.14.2 et j’ai pu résoudre ce problème lorsque j’ai trouvé où le paquet v8-315 était installé et quel était le nom du dossier. Dans mon cas, c'était ici /usr/local/opt/[email protected].

Pour résoudre ce problème, j'ai exécuté ensuite:

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
2
Mavka Poltavka

Après m'être cassé la tête pendant presque deux jours, cela a fonctionné pour moi.

rvm install 2.2.2
gem install Rails
bundle install
1
Sunil Sharma