web-dev-qa-db-fra.com

Gem :: Ext :: BuildError: ERROR: Echec de la création de l'extension native GEM Bcrypt-Ruby

Je suis en train de créer une application Rails et je viens de passer à Yosemite, et je pense que tout est tombé en panne lors de cette mise à jour. Tout fonctionnait hier soir lorsque j'ai enregistré tout mon code sur github. J'ai mis à jour mon ordinateur hier soir à Yosemite. Aujourd'hui, j'ai couru gem install bcrypt-Ruby et tout a éclaté. J'ai;

  1. run xcodebuild -license
  2. bundler mis à jour
  3. a lancé brew install rbenv Ruby-build rbenv-gem-rehash pour obtenir le dernier Ruby
  4. run brew install coreutils

Cela n'a pas fonctionné bien. 

environnement: OSX Yosemite 10.10 , rbenv 0.4.0 , Ruby 2.1.3p242 (2014-09-19 révision 47630) [x86_64-darwin14.0], version 0.9.5 `

La source de l'erreur provient de mon application Rails:

gemfile

gem 'Rails', '4.1.5'
gem 'pg' 
gem 'uglifier', '>= 1.3.0'
gem 'jquery-Rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0',          group: :doc
gem 'spring',        group: :development
gem 'bcrypt-Ruby'

group :test, :development do
  gem 'rspec-Rails', "~> 2.14"
end
group :test do
  gem 'capybara', "2.1.0"
  gem 'factory_girl_Rails', '~> 4.2.1'
end

J'ai eu l'erreur quand j'ai couru bundle install. Voici la trace complète de la pile (tout le /users// provient de la suppression du nom;)

 Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /Users//.rbenv/versions/2.0.0-p247/bin/Ruby -r ./siteconf20141027-60319-1lss4fm.rb extconf.rb 
creating Makefile

make "DESTDIR=" clean

make "DESTDIR="
compiling bcrypt_ext.c
couldn't understand kern.osversion `14.0.0'
In file included from /Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby.h:33,
                 from bcrypt_ext.c:1:
/Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/ruby.h:51:21: error: string.h: No such file or directory
/Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/ruby.h:61:21: error: stdint.h: No such file or directory
/Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/ruby.h:64:23: error: inttypes.h: No such file or directory
/Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/ruby.h:68:19: error: stdio.h: No such file or directory
In file included from /Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/ruby.h:70,
                 from /Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby.h:33,
                 from bcrypt_ext.c:1:
/Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/defines.h:29:21: error: stdlib.h: No such file or directory
In file included from /Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/ruby.h:194,
                 from /Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby.h:33,
                 from bcrypt_ext.c:1:
/usr/local/Cellar/Apple-gcc42/4.2.1-5666.3/bin/../lib/gcc/i686-Apple-darwin11/4.2.1/include/limits.h:10:25: error: limits.h: No such file or directory
In file included from /Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/ruby.h:1567,
                 from /Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby.h:33,
                 from bcrypt_ext.c:1:
/Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/missing.h:23:45: error: math.h: No such file or directory
In file included from /Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/ruby.h:1568,
                 from /Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby.h:33,
                 from bcrypt_ext.c:1:
/Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/intern.h:36:23: error: sys/types.h: No such file or directory
/Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/intern.h:40:22: error: sys/time.h: No such file or directory
In file included from /Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/intern.h:43,
                 from /Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/ruby.h:1568,
                 from /Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby.h:33,
                 from bcrypt_ext.c:1:
/Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/st.h:140: error: expected declaration specifiers or ‘...’ before ‘uint32_t’
In file included from /Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/ruby.h:1568,
                 from /Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby.h:33,
                 from bcrypt_ext.c:1:
/Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/intern.h:326: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘rb_fdset_t’
/Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/intern.h:416: error: expected declaration specifiers or ‘...’ before ‘fd_set’
/Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/intern.h:416: error: expected declaration specifiers or ‘...’ before ‘fd_set’
/Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/intern.h:416: error: expected declaration specifiers or ‘...’ before ‘fd_set’
/Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/intern.h:416: warning: ‘struct timeval’ declared inside parameter list
/Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/intern.h:416: warning: its scope is only this definition or declaration, which is probably not what you want
/Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/intern.h:417: error: expected declaration specifiers or ‘...’ before ‘rb_fdset_t’
/Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/intern.h:417: error: expected declaration specifiers or ‘...’ before ‘rb_fdset_t’
/Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/intern.h:417: error: expected declaration specifiers or ‘...’ before ‘rb_fdset_t’
/Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/intern.h:417: warning: ‘struct timeval’ declared inside parameter list
/Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/intern.h:418: warning: ‘struct timeval’ declared inside parameter list
/Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/intern.h:514: error: expected declaration specifiers or ‘...’ before ‘mode_t’
/Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/intern.h:593: error: expected declaration specifiers or ‘...’ before ‘pid_t’
/Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/intern.h:607: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘rb_fork’
/Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/intern.h:608: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘rb_fork_err’
/Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/intern.h:610: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘rb_waitpid’
/Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/intern.h:611: error: expected ‘)’ before ‘pid’
/Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/intern.h:612: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘rb_spawn’
/Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/intern.h:613: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘rb_spawn_err’
/Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/intern.h:615: error: expected ‘)’ before ‘pid’
/Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/intern.h:728: error: expected declaration specifiers or ‘...’ before ‘uint32_t’
/Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/intern.h:851: error: expected ‘)’ before ‘long’
/Users//.rbenv/versions/2.0.0-p247/include/Ruby-2.0.0/Ruby/intern.h:852: error: expected ‘)’ before ‘long’
bcrypt_ext.c: In function ‘bc_salt’:
bcrypt_ext.c:21: warning: incompatible implicit declaration of built-in function ‘strlen’
make: *** [bcrypt_ext.o] Error 1

make failed, exit code 2

Gem files will remain installed in /Users//ticket_tracker/vendor/bundle/gems/bcrypt-3.1.9 for inspection.
Results logged to /Users//ticket_tracker/vendor/bundle/extensions/x86_64-darwin-12/2.0.0-static/bcrypt-3.1.9/gem_make.out
An error occurred while installing bcrypt (3.1.9), and Bundler cannot continue.
Make sure that `gem install bcrypt -v '3.1.9'` succeeds before bundling.

Si quelqu'un a déjà mis à jour OSX, Rbenv, Ruby, etc. et peut me donner des indications, ce serait très apprécié. Je peux également poster plus de code/environnement mis en place si nécessaire. 

11
user3749994

J'ai eu le même problème que j'ai résolu en réinstallant les outils de développement en ligne de commande XCode:

xcode-select --install
bundle install
19
alotofnoodles

Seule une combinaison d'actions m'a aidé à résoudre le problème. Voici ma séquence

1)

xcode-select --install
bundle install

2)

brew update
brew upgrade rbenv Ruby-build

3) Passé de Ruby 2.1.4 à 2.1.5

rbenv install 2.1.5   
rbenv global 2.1.5
rbenv Shell 2.1.5
rbenv rehash
gem install bundler
bundle

4) (facultatif) au cas où vous auriez eu un problème avec l'installation de nokogiri

brew install libxml2
bundle config build.nokogiri "--use-system-libraries --with-xml2-include=/usr/local/opt/libxml2/include/libxml2"
bundle
1
Serge Seletskyy

Après la mise à niveau vers OS X Yosemite et la tentative d'exécution de certaines applications Rails, je suis tombé sur d'autres problèmes.

En raison de la folie Apple après l'installation de Xcode, gcc ne compile pas de programmes comme n'importe quel compilateur gcc. Il vous demande plutôt de lire et d'accepter les termes du contrat de licence. Essayer

gcc --version 

puis page à travers la merde de licence et le type d'accord à la fin, il devrait alors agir comme un compilateur gcc normal.

Cependant, cela ne fonctionne toujours pas car la version fournie de gcc (4.2.1) est trop ancienne pour libv8 (la version 4.4 était requise). Vous devez donc installer une version plus récente de gcc à l'aide de macports. Visitez http://www.macports.org/install.php . Une fois que macports est installé, tapez

Sudo port install gcc48 +universal 
Sudo port select --set gcc mp-gcc48
hash gcc
gcc --version

et vous devriez voir

gcc (MacPorts gcc48 4.8.4_0+universal) 4.8.4

au 3/2/2015 gcc4.8 a eu 4 versions de correctifs de bogues et gcc4.9 en a 2 alors faites votre choix.

Maintenant que vous avez un compilateur gcc plus à jour, le prochain obstacle consiste à construire therubyracer. Gcc4.8 sur darwin ne reconnaît pas l'option -rdynamic, donc le curseur ne sera pas construit.

J'ai ajouté therubyracer et modifié extconf.rb pour modifier les options du compilateur. Vous pouvez l’utiliser à partir de github. Pour ce faire, changez votre Gemfile comme ça 

# See https://github.com/sstephenson/execjs#readme for more supported runtimes 
platforms :Ruby do
  if Ruby_PLATFORM=~ /darwin/ 
    gem 'therubyracer', :git => 'https://github.com/damianham/therubyracer.git'
  else
    gem 'therubyracer', '0.12.1' 
  end
end
0
Damian Hamill

J'utilise Ruby v 2.2.2, cela m'a aidé lorsque j'ai reçu cette erreur:

Gem :: Ext :: BuildError: ERROR: Echec de la création de l'extension native GEM Bcrypt-Ruby

xcode-select --install 
brew update
gem install bundler
bundle install

Si xcode-select --install échoue, assurez-vous d'avoir accepté la licence.

Sudo xcodebuild -license accept
0
Frank Avila