Ich habe gerade ein Upgrade von High Sierra auf Mojave durchgeführt und Xcode sowie seine Befehlszeilentools und zusätzliche Tools installiert. Nichts wird vom Terminal kompiliert, alles sagt /usr/include fehlt!
Ich habe überprüft und ALLE Dev-bezogenen Verzeichnisse unter /usr fehlen!
Irgendeine Idee, wie man es repariert?
Fügen Sie das -isysroot
Flag zu Ihren Compiler-Flags hinzu, um automatisch das entsprechende SDK-Header-Verzeichnis einzuschließen und die Notwendigkeit für das /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
Paket zu vermeiden, das "in einer zukünftigen Version ... nicht mehr bereitgestellt wird".
Beispiele:
-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk
oder
-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk
Sie können verwenden xcrun --show-sdk-path
, um den Standard-SDK-Pfad zu finden.
Sie können auch die von Xcode oder CommandLineTools installierten /usr/bin/-Versionen von clang, clang++, cc, c++, gcc, g++ verwenden, die Shims aufrufen, um das richtige Tool xcrun
mit dem aktuellen SDK aufzurufen und Verzeichnisse einzuschließen. Dies ist standardmäßig CommandLineTools, wenn Sie das installiert haben.
Sie können das Verhalten ändern, um Xcode zu verwenden, indem Sie:
$ sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
oder zurückschalten:
$ sudo xcode-select -s /Library/Developer
Sie müssen nach der Installation der Befehlszeilentools einen weiteren Schritt ausführen:
sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
Warum? Apple hat ein neues Build-Tool Dance eingeführt - System-Includes werden jetzt nur noch unter einem bestimmten SDK-Pfad mit Xcode 10 und höher gehalten :
Das Command Line Tools-Paket installiert die macOS-Systemheader im macOS SDK. Software, die mit den installierten Tools kompiliert wird, sucht nach Headern im macOS SDK, das entweder
[...]
Die Befehlszeilentools durchsuchen standardmäßig das SDK nach Systemheadern. Einige Software kann jedoch möglicherweise nicht korrekt mit dem SDK erstellt werden und erfordert die Installation von macOS-Headern im Basissystem unter
/usr/include
[Hervorhebung hinzugefügt]. Wenn Sie der Betreuer einer solchen Software sind, empfehlen wir Ihnen, Ihr Projekt zu aktualisieren, damit es mit dem SDK funktioniert, oder einen Fehlerbericht für Probleme einzureichen, die Sie daran hindern. Als Problemumgehung wird ein zusätzliches Paket bereitgestellt, das die Header auf dem Basissystem installiert. In einer zukünftigen Version wird dieses Paket nicht mehr bereitgestellt. Sie finden dieses Paket unter:/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
Um sicherzustellen, dass Sie die vorgesehene Version der Befehlszeilentools verwenden, führen Sie nach der Installation
xcode-select -s <path to Xcode>
oder ausxcode select -s /Library/Developer/CommandLineTools
.
sudo
, damit dieser Befehl funktioniertDas "Warum" liegt darin, dass Apple es abgelehnt hat, ein /usr/include zu haben, das sich vom SDK unterscheidet. Sie sollten sich nicht darauf verlassen, dass es vorwärts geht.
Die Compiler wissen bereits, dass sie ihre Includes innerhalb des SDK finden, sodass das Verzeichnis /usr/include nicht mehr wirklich benötigt wird. Sie finden das Installationsverzeichnis des SDK für die Include-Dateien mitxcrun --show-sdk-path
zlib_places="/usr/local /usr /opt/local /sw"
dort)
Ayke
-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
, wenn Sie nur die Standardeinstellung verwenden möchten. In den meisten Fällen sollten Sie jedoch wahrscheinlich untersuchen, warum der von Ihnen verwendete C-Compiler nicht die richtigen Flags aufnimmt (Sie sollten wahrscheinlichclang
aus dem SDK verwenden, anstatt das, was Sie verwenden).