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!

Navneet
quelle
Ü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
Aleksei Matiushkin
quelle
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
Joki
quelle
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 ...

mimoralea
quelle
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
22

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

sudo apt-get install ruby2.3-dev
Juanito Fatas
quelle
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
Juan De León
quelle
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
Kinifwyne
quelle
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 ++

Meilen davis
quelle
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
Prokur
quelle
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
Aaron Brager
quelle
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
Emmojo
quelle
2

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

Bott
quelle
1

Xcode -> Einstellungen -> Standorte

Ändern Sie die Befehlszeilentools in Xcode 11.2.1

Chester Fang
quelle
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.

Shawn Lauzon
quelle
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
aleksander_si
quelle
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.

Gökçer Gökdal
quelle
-2
sudo apt-get --reinstall install ruby

versuchen Sie es für Ubuntu 16.04

Ajmal Aamir
quelle