Fehler beim Installieren von json gem 'mkmf.rb kann keine Header-Dateien für Ruby finden'


407

Für den Kontext auf einem Remote-Server mit einer Firewall. Ich richte meine Umgebung über einen Proxy ein. Ich habe ruby 1.8.7. Wenn ich versuche, gem zu installieren ..

sudo gem install --http-proxy <host address>:<port> json

Ich erhalte folgende Fehlermeldung:

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 can't find header files for ruby at /usr/lib/ruby/ruby.h

Gem files will remain installed in /usr/lib64/ruby/gems/1.8/gems/json-1.8.1 for inspection.
Results logged to /usr/lib64/ruby/gems/1.8/gems/json-1.8.1/ext/json/ext/generator/gem_make.out

Da ich mir nicht sicher war, wo das Problem liegt, habe ich gegoogelt und diese gefunden

Irgendwelche Hinweise? Vielen Dank!


Überprüfen Sie das Vorhandensein der /usr/lib/ruby/ruby.hDatei. Wenn diese vorhanden ist, zeigen Sie uns die Fehlermeldung von an gem_make.out.
Малъ Скрылевъ

Antworten:


785

Modernes Update, wie von mimoralea angegeben :

Für den Fall, dass 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

oder generisch:

sudo apt-get install ruby-dev

oder

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

Der erste Link, den Sie gepostet haben, ist genau Ihr Fall: Es ist keine Ruby-Entwicklungsumgebung installiert. Development Env wird benötigt, um Ruby-Erweiterungen zu kompilieren, die meistens in geschrieben sind C. Proxy hat nichts mit dem Problem zu tun: Alles wird gut heruntergeladen, nur die Kompilierung schlägt fehl.

Ich würde Ihnen empfehlen, das Paket ruby-dev( ruby-develfür RPM-basierte Distributionen) auf Ihrem Zielcomputer zu installieren .

gcc Paket kann auch benötigt werden.

Versuchen:

$ sudo apt-get install ruby-dev

Oder für Redhat Distribution:

$ sudo yum install ruby-devel

Oder für [open] SuSE:

$ sudo zypper install ruby-devel

2
Vielen Dank! Ich meinte, die Antwort in dieser Frage schien modulspezifisch zu sein. Ich denke statt ruby-devseiner ruby-devel. Hier habe ich gefunden, was ich genau brauchte - digitalocean.com/community/articles/…
Navneet

9
Nach der Installation von Ruby-Devel (auf Fedora 20) wurde der Fehler *** extconf.rb fehlgeschlagen *** angezeigt. Nachdem Sie gcc wie vorgeschlagen installiert hatten, funktionierte alles einwandfrei.
Wayne Riesterer

Sie können sudo zypper install ruby-develfür openSUSE
Superbob

Dies macht unter Ubuntu nichts. Das fehlende Paket ist ruby2.2-dev(oder welche Version Sie installiert haben).
Luís de Sousa

2
Nein, diese Antwort hat nichts geholfen, etwas zu lösen. Die richtige Antwort ist die von mimoralea .
Luís de Sousa

177

Für Xcode 11 unter macOS 10.14 kann dies auch nach der Installation von Xcode und der Installation von Befehlszeilentools und dem Akzeptieren der Lizenz mit geschehen

sudo xcode-select --install
sudo xcodebuild -license accept

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

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

Unter MacOS 10.14 mit Xcode 11 wird der nicht vorhandene Pfad gedruckt

/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

Xcode 11 installiert jedoch ein macOS 10.14 SDK /Library/Developer/CommandLineTools/SDKs/MacOS10.14.sdk. Es ist nicht erforderlich, die Systemverzeichnisse durch Installieren der alten Header-Dateien zu verschmutzen, wie in anderen Antworten vorgeschlagen. Wenn Sie stattdessen dieses SDK auswählen, werden die entsprechenden ruby2.3-Header gefunden:

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

Dies sollte jetzt korrekt gedruckt werden

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

Gleichfalls, gem install sollte funktionieren, während dieses SDK ausgewählt ist.

Verwenden Sie, um zum aktuellen Xcode SDK zurückzukehren

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

14
Legende. Genau mein Problem am 10.14.6. Traurig kann nicht zweimal upvoten.
Diego Freniche

2
Sie, Sir, sind ein obskurer Wissensoberherr.
Rubin Simons

Vielen Dank für die detaillierten Informationen! Es funktionierte schließlich und erzeugte den "FEHLER: Fehler bei der Installation von jekyll: jekyll-sass-converter erfordert Ruby-Version> = 2.4.0." Das bringt mich zum Lachen.
Nickolay Olshevsky

@NickolayOlshevsky In diesem Fall müssen Sie Ruby über Homebrew installieren, derzeit in Version 2.6.5.
Joki

1
Du verdammte Codierungslegende.
Aljosha Novakovic

75

Für den Fall, dass Sie Ruby 2.0 oder 2.2 (danke @ patrick-davey) oder 2.3 (danke @ juanitofatas) verwenden.

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 das Muster bekommen Sie hier ...


6
Oder wenn Sie 2.2 ...sudo apt-get install ruby2.2-dev
patrickdavey

@ Patrick-Davey E: Unable to locate package ruby2.2-dev E: Couldn't find any package by regex 'ruby2.2-dev'
Aparichith

@dson wahrscheinlich benutzt du eine alte Ubuntu-Version. Versuchen Sie ein Upgrade.
Pithikos

Ich habe auch den gleichen Fehler erhalten und verwende eine vollständig aktualisierte Version von Linux Mint. Ich denke nicht, dass die Betriebssystemversion das Problem ist.
Andrew Faulkner

2
Wenn Sie eine alte Version von Ubuntu wie Trusty (14.04) verwenden, fügen Sie die Brightbox PPA für Ruby hinzu:sudo apt-add-repository -y ppa:brightbox/ruby-ng && sudo apt-get update && sudo apt-get install -y ruby2.2-dev
Siddhu


19

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

sudo xcode-select --install

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

sudo xcodebuild -license

Das war die richtige Antwort für mich. Ich hatte keine Ruby Development Header. Nachdem ich xCode installiert hatte, funktionierte der ursprüngliche Befehl, den ich ausgeführt habe. Vielen Dank!
Sweet Chilly Philly

Unter OSX mit Mojave musste ich Folgendes ausführen:su - $USER -c 'xcode-select --install'
Belden

Das hat auch bei mir funktioniert.
Adougies

11

Ich hatte ein ähnliches Problem mit Cygwin, um den folgenden Befehl auszuführen:

$ gem install rerun

Ich habe es gelöst, indem ich die folgenden Cygwin-Pakete installiert habe:

  • Ruby-Devel
  • libffi-devel
  • gcc-core
  • gcc-g ++
  • machen
  • automake1.15

Dies segfaults für mich:/cygdrive/z/.gem/ruby/extensions/x86-cygwin/json-1.8.3/json/ext/parser.so: [BUG] Segmentation fault at 0x0001b8
rr-

Gelöst durch Ausführen rm -rf ~/.gem/und erneutes Ausgeben des Befehls.
rr-

ruby-devauf Himbeer pi
CONvid19

11

Die am häufigsten gewählte Lösung funktionierte auf meinem Computer nicht (Linux Mint 18.04). Nach einem sorgfältigen Blick stellte ich fest, dass g ++ fehlte. Gelöst mit

sudo apt-get install g ++


1
Dies funktionierte für mich unter Ubuntu 18.04. Ich musste auch eine sudo apt-get-Installation machen, bevor die g ++ - Installation funktionierte.
Scott Lindner

Kann die Installation bestätigen makeund g++mein Problem auch unter Ubuntu 18.04 beheben!
Arda

9

falls Sie SUSE verwenden

sudo yast2 -i ruby-devel

2
Ich bevorzuge sudo zypper in ruby-devel.
Lesik2008

5

Xcode 11 / macOS Catalina

Unter Xcode 11 / macOS Catalina befinden sich die Header-Dateien nicht mehr am alten und am alten Speicherort /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg Datei ist nicht mehr verfügbar.

Stattdessen werden die Header jetzt im /usr/includeVerzeichnis des aktuellen SDK-Pfads installiert :

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include

Der größte Teil dieses Verzeichnisses kann mithilfe der Ausgabe von gefunden werden xcrun --show-sdk-path. Wenn Sie diesen Pfad zur CPATHUmgebungsvariablen hinzufügen , können Build-Skripte (einschließlich der über aufgerufenen bundle) ihn im Allgemeinen finden.

Ich habe dies behoben, indem ich meine CPATHin meiner .zshrcDatei festgelegt habe:

export CPATH="$(xcrun --show-sdk-path)/usr/include"

Nach dem Öffnen einer neuen Shell (oder dem Ausführen source .zshrc) erhalte ich nicht mehr die Fehlermeldung mkmf.rb kann unter /usr/lib/ruby/ruby.h keine Header-Dateien für Ruby finden und die Rubygems werden ordnungsgemäß installiert.

Hinweis zum Erstellen auf Nicht-MacOS-Plattformen

Wenn Sie auf Nicht-MacOS-Plattformen wie iOS / tvOS / watchOS erstellen, wird bei dieser Änderung versucht, das MacOS-SDK in diese Plattformen aufzunehmen, was zu Erstellungsfehlern führt. Legen Sie zum Auflösen entweder keine CPATHUmgebungsvariable bei der Anmeldung fest oder setzen Sie sie vorübergehend auf leer, wenn Sie wie folgt ausgeführt xcodebuildwerden:

CPATH="" xcodebuild --some-args

2
Haben Sie Unterlagen zu CPATH? Das Einstellen löst das Problem für mich nicht. Als ich den Wert an erster Stelle überprüfte, erschien er undefiniert.
Ilias Karim

1
gcc.gnu.org/onlinedocs/cpp/Environment-Variables.html - Je nach verwendeter Sprache / verwendetem Compiler müssen Sie möglicherweise eine andere Umgebungsvariable finden. Es ist normal, dass es standardmäßig
deaktiviert ist

Und falls Sie es anderswo nicht gesehen haben, darf es keine Leerzeichen im Xcode-Pfad /
-Namen geben

Nach all den Antworten hier war dies die einzige Lösung, die für mich funktioniert hat. Ich bin auf Mojave 10.14.6und XCode 11.3.1. Vielen Dank, ich habe 1 Tag
gebraucht

4

In Fedora 21 und höher öffnen Sie einfach ein Terminal und installieren die Ruby Development-Dateien als Root.

dnf install ruby-devel

2

Möglicherweise müssen Sie gcc nach der Installation von ruby-devel installieren


1

Xcode -> Einstellungen -> Standorte

Ändern Sie die Befehlszeilentools in Xcode 11.2.1


1

Unter Mac 10.14 scheinen die Header-Dateien nicht an der richtigen Stelle installiert zu sein. Anstatt wie bei den anderen Fixes die Pfade zu ändern, konnte ich Folgendes ausführen:

open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

Befolgen Sie die Anweisungen und es hat dieses Problem für mich gelöst.


0

Sie müssen den gesamten Rubin und nicht nur das Mindestpaket installieren. Der richtige Befehl lautet:

sudo apt install ruby-full

Der folgende Befehl installiert auch keinen vollständigen Ruby:

sudo apt-get install ruby2.3-dev

0

Für Ubuntu 18 nach Überprüfung der während der Installation erwähnten Protokolldatei

Ergebnisse protokolliert unter /var/canvas/vendor/bundle/ruby/2.5.0/extensions/x86_64-linux/2.5.0/nio4r-2.5.2/gem_make.out

mit

less /var/canvas/vendor/bundle/ruby/2.5.0/extensions/x86_64-linux/2.5.0/nio4r-2.5.2/gem_make.out

Mir ist aufgefallen, dass makedas nicht gefunden wird. Also installiert machen durch

sudo apt-get install make

alles hat funktioniert.


-2
sudo apt-get --reinstall install ruby

versuchen Sie es für Ubuntu 16.04

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.