Docker für Mac - mkmf.rb kann keine Header-Dateien für Ruby finden

72

Ich habe XCode auf meinem Mac aktualisiert und seitdem beim Starten von Docker mit wird folgende docker-sync-stack startFehlermeldung angezeigt:

mkmf.rb can't find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/include/ruby.h

Ich habe versucht, Ruby damit zu installieren: brew install rbenv ruby-buildaber das ändert nichts.

Weiß jemand, wie ich das beheben kann?

Vielen Dank!

Torben
quelle
2
Ich habe es herausgefunden - nach dem Upgrade auf Xcode 9 müssen Sie auch die Befehlszeilentools für Xcode 9 installieren.
Torben
9
Treffen Sie dieses Problem, wenn Sie auf Xcode 11 GM aktualisieren. Hat jemand eine Lösung gefunden? Der sudo xcode-select --installBefehl besagt, dass ich bereits Befehlszeilentools installiert habe. Es wurde auch versucht, die Xcode 11-Befehlszeilentools manuell von den Entwickler-Downloads herunterzuladen. Aber ich bekomme immer noch den Fehlermkmf.rb can't find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/include/ruby.h
jdelaune

Antworten:

175

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

Ebenso gem installsollte funktionieren, während dieses SDK ausgewählt ist.

Verwenden Sie, um wieder das aktuelle Xcode 11 SDK zu verwenden

sudo xcode-select --switch /Applications/Xcode.app
Joki
quelle
3
$ xcrun --show-sdk-versionGeben Sie xcodebuild: error: SDK "/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/" cannot be located. xcrun: error: unable to lookup item 'SDKVersion' in SDK '/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/', ich benutze am Ende @bdorfmans Lösung vonrbenv
Miranda
3
Tolle Erklärung, danke! Einverstanden über die richtige Antwort.
Graystripe
2
Vielen Dank, beste Antwort, denn es erklärt die Gründe und lässt nicht nur einige auszuführende Befehle fallen.
ernesto
1
Durch das Akzeptieren der Lizenz konnte ich auch CocoaPods installieren. Vielen Dank.
Andrewlundy
1
Wunderbare Antwort, das war genau mein Problem bei der Installation von CocoaPods. Vielen Dank.
RadicalFish
136

Keine der anderen Lösungen hat bei mir funktioniert. Ich habe Folgendes ausgeführt, um das Problem unter Mac OS 10.14.x zu beheben:

sudo rm -rf /Library/Developer/CommandLineTools
xcode-select --install
sudo xcodebuild -license accept
open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
ryanpcmcquen
quelle
15
Danke, mit macOS 10.14.6 hat nichts anderes für mich funktioniert.
Tony
5
Dies behebt ebenfalls das Problem für mich nach dem Upgrade auf Xcode 11
Paul Popiel
1
Gem Installationspaket auf Xcode 11 und Mojave schlug fehl. Diese Antwort brachte mich in Schwung. Sollte als Antwort ausgewählt werden.
Bhaskar
1
Dies war das einzige, was für mich funktioniert hat. Dies sollte als Antwort ausgewählt werden. Ich habe auch den Rat in diesem anderen Thread ohne Erfolg versucht ( stackoverflow.com/questions/26434642/… ), bevor ich diese Antwort gefunden habe.
Watr
3
Mein Problem betraf die Installation von Cocoapods und wurde dadurch für mich behoben. macOS 10.14.5 xcode 11.3.1 Danke!
Chuck Taylor
35

Wenn Sie XCode aktualisieren, müssen Sie die Befehlszeilentools installieren und zusätzlich die allgemeinen Geschäftsbedingungen akzeptieren:

sudo xcode-select --install

Dann:

sudo xcodebuild -license
Tadman
quelle
6
Der erste Befehl reichte aus, um Docker-Sync-Stack nicht mehr zu beschweren. Tatsächlich schlug der zweite Befehl mit "xcode-select: error: tool 'xcodebuild' fehl, aber das aktive Entwicklerverzeichnis '/ Library / Developer / CommandLineTools' ist eine Instanz der Befehlszeilen-Tools"
Motin
1
Wie @Motin sagte, scheint der zweite Befehl nicht zu funktionieren, aber zum Glück war es nicht notwendig docker-sync start, aufhören zu müssen, sich zu beschweren.
Joseph Siefers
Das hat mir leider nicht gereicht.
Ryanpcmcquen
18

Ab Xcode 11 scheinen die Ruby-Entwicklungsheader nicht mehr enthalten zu sein, sodass Sie sie manuell außerhalb der Xcode-Befehlszeilentools installieren müssen.

ZB für mich mit rbenv habe ich getan

rbenv install 2.6.4
rbenv global 2.6.4
eval "$(rbenv init -)"

Dann lief Bundle-Installation und alles funktionierte wie erwartet.

bdorfman
quelle
Vor allem hat das bei mir funktioniert. Ich möchte auch darauf hinweisen, dass rbenvich durch Hinzufügen in meinem CI-Workflow große Verbesserungen erzielen konnte
Bundler muss
1
Das funktioniert bei mir aus irgendeinem Grund nicht. Ich habe sogar versucht, "2.6.4" durch "2.3.0" zu ersetzen. Wenn ich nachschaue, gibt es kein /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/includeVerzeichnis, obwohl der Pfad bis "include" existiert.
Darrell Brogdon
Danke, aber ich musste das Juwel erneut installieren, da es für die Docker-Synchronisierung nichts zu bündeln gibt. Die Antwort von @fnordl hat bei mir funktioniert.
Nils Petersohn
@DarrellBrogdon Ihre Umgebung ist wahrscheinlich nicht richtig eingerichtet. Wenn es richtig funktioniert, sucht mkmf nicht mehr nach 2.3, sondern nach der von Ihnen eingestellten Version. Wenn Sie immer noch eine Fehlermeldung mit dem Pfad erhalten /System/Library/Frameworks/Ruby.framework/Versions/2.3, zeigt dies an, dass Ihre Umgebung immer noch das MacOS-System Ruby und nicht das Rbenv verwendet.
Bdorfman
16

Für Xcode 11 habe ich dies behoben, indem ich auch das /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkgPaket installiert habe .

Sergey Tykhonov
quelle
1
Hey, ich habe diese Datei nicht. Wo kann ich es finden ?
Nils Petersohn
Stellen Sie sicher, dass das Paket unter dem von Sergey angegebenen Pfad vorhanden ist. Überprüfen Sie den Pfad von root. Nicht im Pfad Ihres Benutzers. Wenn dies nicht der Fall ist, können Sie versuchen, zuerst die Befehlszeilentools zu installieren: xcode-select --installund es sollte angezeigt werden. Sobald Sie das Paket unter diesem Pfad haben, erzwingen Sie die Installation wie folgt sudo installer -pkg macOS_SDK_headers_for_macOS_10.14.pkg -target /(Ausführung von / Library / Developer / CommandLineTools / Packages)
daveferrara1
15

Einzeilige Befehlsbehebung:

Unter OSX Mojave habe ich den folgenden Befehl ausgeführt:

sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /

und es hat das Problem behoben.

SudoPlz
quelle
Dies hat das Problem für mich behoben.
Ruben Marin
2
Hat bei mir nicht funktioniert. Ich werde aufgefordert, ein -allowUntrustedFlag hinzuzufügen . Aber dann ist es am Ende immer noch gescheitert. Die Fehlermeldung istinstaller: The install failed (The Installer encountered an error that caused the installation to fail. Contact the software manufacturer for assistance.)
Anthony Kong
7

Ich hatte das gleiche Problem bei der Installation von Fastlane. Die Antwort des Tadman ist korrekt, aber die Befehlszeilen funktionieren bei Xcode 10.2.1 nicht (bei anderen Versionen bin ich mir nicht sicher). Sie müssen Xcode öffnen, dann Einstellungen öffnen, Standorte auswählen und Befehlszeilentools auswählen. In meinem Fall ist das Feld Befehlszeilentools leer.

Duan Nguyen
quelle
1
Das hat bei mir nach stundenlanger Suche funktioniert. Vielen Dank!
RoyB
Vielen Dank Mann, das hat auch bei mir funktioniert. Meine Xcode-Version ist auch 10.2.1
mendez7
7

Wie @bdorfman in seinem Kommentar sagte, sind die Ruby-Header ab Xcode 11-Build nicht mehr enthalten, aber sie scheinen zu versuchen, so schnell wie möglich einen neuen Build dafür zu erstellen (?): Https://discuss.circleci.com/ t / xcode-11-g-seed-2-release / 32505/12 .

Was für mich funktionierte, war zu verwenden, rbenvwie @bdorfman sagte:

rbenv install 2.6.4
rbenv global 2.6.4
eval "$(rbenv init -)"

Aber mit dem zusätzlichen Schritt docker-sync, Ihre neue Ruby-Version zu ergänzen. Da nach dem Ändern der Ruby-Version (zum Beispiel)

$ ruby -v
ruby 2.6.4p104 (2019-08-28 revision 67798) [x86_64-darwin18]

Und dann laufen Edelsteinliste:

$ gem list
bigdecimal (default: 1.4.1)
bundler (default: 1.17.2)
cmath (default: 1.0.0)
csv (default: 3.0.9)
date (default: 2.0.0)
dbm (default: 1.0.0)
did_you_mean (1.3.0)
e2mmap (default: 0.1.0)
etc (default: 1.0.1)
fcntl (default: 1.0.0)
fiddle (default: 1.0.0)
fileutils (default: 1.1.0)
forwardable (default: 1.2.0)
io-console (default: 0.4.7)
ipaddr (default: 1.2.2)
irb (default: 1.0.0)
json (default: 2.1.0)
logger (default: 1.3.0)
matrix (default: 0.1.0)
minitest (5.11.3)
mutex_m (default: 0.1.0)
net-telnet (0.2.0)
openssl (default: 2.1.2)
ostruct (default: 0.1.0)
power_assert (1.1.3)
prime (default: 0.1.0)
psych (default: 3.1.0)
rake (12.3.2)
rdoc (default: 6.1.2)
rexml (default: 3.1.9)
rss (default: 0.2.7)
scanf (default: 1.0.0)
sdbm (default: 1.0.0)
shell (default: 0.7)
stringio (default: 0.0.2)
strscan (default: 1.0.0)
sync (default: 0.5.0)
test-unit (3.2.9)
thwait (default: 0.1.0)
tracer (default: 0.1.0)
webrick (default: 1.4.2)
xmlrpc (0.3.0)
zlib (default: 1.0.0)

(enthält keine Docker-Sync)

Wenn Sie die Gem-Installation für Docker-Sync ausführen, verwenden Sie die Docker-Synchronisierung für Ihren von rbenv verwalteten Ruby.

$ gem install docker-sync

fnordl
quelle
3

Wenn Sie einen tieferen Einblick in das Problem erhalten möchten:

Mac OS X 10.14 hat die Platzierung der Include-Bibliotheken an ihrem üblichen Speicherort / usr / include eingestellt und sie nur im XCode-Verzeichnis gespeichert.

Um zu bestätigen, dass dies das Problem ist, führen Sie einfach aus ls /usr/include . Wenn das Ergebnis leer ist, ist es wirklich dieses Problem.

Apple liefert ein "Legacy-Installationsprogramm" aus, damit Sie die Header am "alten Speicherort" installieren können. Um das Problem zu beheben, führen Sie einfach Folgendes aus:

sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /

https://silvae86.github.io/sysadmin/mac/osx/mojave/beta/libxml2/2018/07/05/fixing-missing-headers-for-homebrew-in-mac-osx-mojave/

Dmytro Hutsuliak
quelle
2

Durch Ausführen open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkgim Terminal wird der Paketinstallationsassistent geöffnet. Nach ordnungsgemäßer Installation konnte ich fortfahren.

MacOS 10.4.4

LordKiz
quelle