webentwicklung-frage-antwort-db.com.de

Gem :: Ext :: BuildError: ERROR: Fehler beim Erstellen der nativen Gem-Erweiterung Bcrypt-Ruby

Ich mache eine Rails-App und habe gerade ein Upgrade auf Yosemite durchgeführt, und ich denke, während dieses Updates ist alles kaputt gegangen. Letzte Nacht hat alles funktioniert, als ich meinen Code in github eingecheckt habe. Ich habe meinen Computer gestern Abend auf Yosemite aktualisiert. Heute lief ich gem install bcrypt-Ruby und alles brach zusammen. Ich habe;

  1. lief xcodebuild -license
  2. aktualisierter Bundler
  3. lief brew install rbenv Ruby-build rbenv-gem-rehash, um den neuesten Ruby zu erhalten
  4. lief brew install coreutils

Das hat aber nicht funktioniert. 

Umgebung: OSX Yosemite 10.10 , rbenv 0.4.0 , Ruby 2.1.3p242 (2014-09-19, Revision 47630) [x86_64-darwin14.0], Sud 0.9.5 `

Die Fehlerquelle stammt aus meiner Rails-App:

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

Ich habe die Fehlermeldung erhalten, als ich bundle install lief. Hier ist der vollständige Stack-Trace (der gesamte /users// stammt vom Namen;)

 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.

Wenn jemand Erfahrung mit OSX, Rbenv, Ruby usw. hat und mir ein paar Hinweise geben kann, wäre das sehr dankbar. Ich kann bei Bedarf auch mehr Code/Umgebung einrichten. 

11
user3749994

Ich hatte das gleiche Problem, das ich durch die Neuinstallation der XCode-Befehlszeilen-Entwickler-Tools gelöst habe:

xcode-select --install
bundle install
19
alotofnoodles

Nur eine Kombination von Aktionen half mir, das Problem zu lösen. Hier ist meine Reihenfolge

1)

xcode-select --install
bundle install

2)

brew update
brew upgrade rbenv Ruby-build

3) Umstellung von Ruby 2.1.4 auf 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) (optional) für den Fall, dass Sie Probleme mit der Installation von nokogiri hatten

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

Nach dem Upgrade auf OS X Yosemite und dem Ausführen einiger Rails-Apps bin ich auf andere Probleme gestoßen.

Aufgrund eines gewissen Apple-Wahnsinns nach der Installation von Xcode kompiliert gcc keine Programme wie jeder andere gcc-Compiler. Stattdessen werden Sie aufgefordert, die Lizenzvereinbarung zu lesen und zuzustimmen. Dies ist eine verdammte Wange, wenn man bedenkt, dass es gcc ist. Versuchen

gcc --version 

dann blättere durch den Lizenz-Mist und tippe am Ende als einverstanden, dann sollte es als normaler gcc-Compiler fungieren.

Dies funktioniert jedoch möglicherweise nicht, da die gebündelte Version von gcc (4.2.1) für libv8 (4.4 war erforderlich) zu alt ist. Sie müssen stattdessen eine neuere Version von gcc mit macports installieren. Besuchen Sie http://www.macports.org/install.php . Sobald macports installiert ist, geben Sie den Typ ein

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

und du solltest sehen

gcc (MacPorts gcc48 4.8.4_0+universal) 4.8.4

stand vom 02.03.2015 gcc4.8 hat 4 Bugfix-Releases und gcc4.9 hat 2, also wählen Sie Ihre Wahl.

Jetzt, da Sie einen aktuelleren gcc-Compiler haben, ist die nächste Hürde die Erstellung eines neuen Radlers. Gcc4.8 in Darwin erkennt die -rdynamic-Option nicht, so dass kein Therubyracer erstellt wird.

Ich habe Therubyracer gegabelt und extconf.rb modifiziert, um die Compiler-Optionen zu verändern - Sie können es von Github verwenden. Ändern Sie dazu Ihr Gemfile so 

# 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

Ich führe Ruby v 2.2.2 aus. Dies hat mir geholfen, als ich diesen Fehler erhielt:

Gem :: Ext :: BuildError: ERROR: Fehler beim Erstellen der nativen Gem-Erweiterung Bcrypt-Ruby

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

Wenn xcode-select --install fehlschlägt, stellen Sie sicher, dass Sie die Lizenz akzeptiert haben

Sudo xcodebuild -license accept
0
Frank Avila