516 Stimmen

Fehler beim Installieren von JSON-Gem 'mkmf.rb kann Kopfzeilen für Ruby nicht finden'

Zum Kontext: Es handelt sich um einen Remote-Server, der eine Firewall hat. Ich richte meine Umgebung über einen Proxy ein. Ich habe ruby 1.8.7. Wenn ich versuche, gem install...

sudo gem install --http-proxy : json

erhalte ich folgenden Fehler:

Building native extensions.  This could take a while...
ERROR:  Error installing json:
        ERROR: Failed to build gem native extension.

/usr/bin/ruby extconf.rb
mkmf.rb kann die Headerdateien für Ruby unter /usr/lib/ruby/ruby.h nicht finden.

Gem-Dateien bleiben in /usr/lib64/ruby/gems/1.8/gems/json-1.8.1 zur Überprüfung installiert.
Ergebnisse sind in /usr/lib64/ruby/gems/1.8/gems/json-1.8.1/ext/json/ext/generator/gem_make.out protokolliert

Weil ich unsicher war, was das Problem ist, habe ich gegoogelt und folgendes gefunden

Irgendwelche Hinweise? Vielen Dank!

933voto

Aleksei Matiushkin Punkte 112439

Modernes Zeitalter Update, wie von mimoralea angegeben:

Falls Sie Ruby 2.0 oder 2.2 verwenden (danke @patrick-davey).

sudo apt-get install ruby2.0-dev
sudo apt-get install ruby2.2-dev
sudo apt-get install ruby2.3-dev

alternativ, generell:

sudo apt-get install ruby-dev

oder

sudo apt-get install ruby`ruby -e 'puts RUBY_VERSION[/\d+\.\d+/]'`-dev

Der erste von Ihnen gepostete Link ist genau Ihr Fall: Es ist keine Ruby-Entwicklungsumgebung installiert. Eine Entwicklungsumgebung wird benötigt, um Ruby-Erweiterungen zu kompilieren, die meistens in C geschrieben sind. Das Problem hat nichts mit dem Proxy zu tun: Alles wird korrekt heruntergeladen, nur die Kompilierung schlägt fehl.

Ich würde Ihnen empfehlen, das Paket ruby-dev (ruby-devel für rpm-basierte Distributionen) auf Ihrem Zielrechner zu installieren.

Das Paket gcc wird möglicherweise auch benötigt.

Versuchen Sie es mit:

$ sudo apt-get install ruby-dev

Oder, für Redhat Distributionen:

$ sudo yum install ruby-devel

Oder, für [open]SuSE:

$ sudo zypper install ruby-devel

253voto

joki Punkte 6196

Für Xcode 11 auf macOS 10.14 kann dies auch nach der Installation von Xcode und der Installation von Befehlszeilentools und der Akzeptanz der Lizenz passieren

sudo xcode-select --install
sudo xcodebuild -lizenz akzeptieren

Das Problem ist, dass Xcode 11 das macOS 10.15 SDK enthält, das Header für ruby2.6 enthält, aber nicht für das ruby2.3 von macOS 10.14. Sie können überprüfen, ob dies Ihr Problem ist, indem Sie

ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"]'

ausführen, was auf macOS 10.14 mit Xcode 11 den nicht existierenden Pfad ausgibt

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0

Allerdings installiert Xcode 11 ein macOS 10.14 SDK unter /Library/Developer/CommandLineTools/SDKs/MacOS10.14.sdk. Es ist nicht notwendig, die Systemverzeichnisse durch die Installation der alten Header-Dateien zu verschmutzen, wie in anderen Antworten vorgeschlagen. Stattdessen werden durch Auswahl dieses SDK die entsprechenden ruby2.3 Header gefunden:

sudo xcode-select --switch /Library/Developer/CommandLineTools
ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"]'

Dies sollte jetzt korrekt ausgegeben werden

/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0

Ebenso sollte das gem install funktionieren, solange dieses SDK ausgewählt ist.

Um zur aktuellen Xcode SDK zurückzuschalten, verwenden Sie

sudo xcode-select --switch /Applications/Xcode.app

81voto

mimoralea Punkte 9089

Falls du Ruby 2.0 oder 2.2 verwendest (danke @patrick-davey) oder 2.3 (danke @juanitofatas).

sudo apt-get install ruby-dev
sudo apt-get install ruby2.0-dev
sudo apt-get install ruby2.2-dev
sudo apt-get install ruby2.3-dev

Und du verstehst das Muster hier...

24voto

Juanito Fatas Punkte 8441

Ich bin auch auf dieses Problem gestoßen, weil ich Ruby auf Ubuntu über Brightbox installiert habe und dachte, dass ruby-dev der Stamm von Ruby ist. Also habe ich es nicht installiert. Die Installation von ruby2.3-dev behebt das:

sudo apt-get install ruby2.3-dev

21voto

Juan De León Punkte 361

Für diejenigen, die dies auf Mac OS X erhalten, müssen Sie möglicherweise den folgenden Befehl ausführen, um die XCode-Befehlszeilentools zu installieren, auch wenn Sie bereits XCode installiert haben:

sudo xcode-select --install

Außerdem müssen Sie den Nutzungsbedingungen von XCode zustimmen, indem Sie den folgenden Befehl ausführen:

sudo xcodebuild -license

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X