it-swarm.com.de

C-Programm kann auf einem Mac nach dem Upgrade auf Mojave nicht kompiliert werden

Ich habe den Befehl gcc auf dem Terminal verwendet, um C-Programme zu kompilieren, aber plötzlich, nach einem Update meines Mac-Betriebssystems (auf macOS 10.14 Mojave und XCode 10.0), erhielt ich folgende Meldung:

test.c:8:10: fatal error: stdio.h: No such file or directory
#include <stdio.h>
         ^~~~~~~~~
compilation terminated.

Ich habe gcc bereits installiert, da ich es in /usr/local/bin finden kann, und es ist wirklich ein gcc drin. Ich habe versucht, dieselbe Datei auf meinem anderen iMac auszuführen, und es hat problemlos funktioniert.

Ich habe versucht, xcode-select --install auszuführen und es wurde bereits installiert, daher konnte das Problem, das ich jetzt habe, nicht behoben werden. Ich vermute, dass der Pfad durcheinander ist, da er offenbar nicht gcc finden kann, nachdem ich mit dem Kopieren und Einfügen einiger Befehle aus anderen Ressourcen begonnen habe, um dieses Problem zu beheben.

Möchte etwas Hilfe dazu.

125
Maxxx

TL; DR

Stellen Sie sicher, dass Sie das neueste 'Command Line Tools'-Paket heruntergeladen haben, und führen Sie dieses von einem Terminal aus (Befehlszeile):

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

Extrahieren einer halbkohärenten Antwort aus ziemlich ausführlichen Kommentaren…

Präambel

Sehr oft war xcode-select --install die richtige Lösung, aber diesmal scheint es nicht zu helfen. Haben Sie versucht, die Haupt-Xcode-GUI-Oberfläche auszuführen? Möglicherweise wird eine zusätzliche Software für Sie installiert und aufgeräumt. Ich habe das nach der Installation von Xcode 10.0 gemacht, aber vor einer Woche oder länger, lange bevor ich auf Mojave upgegradet habe.

Ich beobachte, dass wenn Ihr GCC in /usr/local/bin installiert ist, Sie wahrscheinlich nicht das GCC von Xcode verwenden. Das ist normalerweise in /usr/bin installiert.

Ich habe auch auf macOS 10.14 Mojave und Xcode 10.0 aktualisiert. Allerdings funktionieren sowohl das System /usr/bin/gcc als auch das System /usr/bin/clang für mich (Apple LLVM version 10.0.0 (clang-1000.11.45.2) Target: x86_64-Apple-darwin18.0.0 für beide). Ich habe ein Problem damit, dass mein selbst erstelltes GCC 8.2.0 keine Header in /usr/include findet, was parallel zu Ihrem Problem mit /usr/local/bin/gcc ist. auch keine Überschriften finden.

Ich habe ein bisschen Vergleiche angestellt und mein Mojave-Rechner hat überhaupt keinen /usr/include, aber /usr/bin/clang kann in Ordnung kompilieren. Ein Header (_stdio.h, mit führendem Unterstrich) befand sich in meinem alten /usr/include; es fehlt jetzt (daher mein Problem mit GCC 8.2.0). Ich habe xcode-select --install ausgeführt und es stand "xcode-select: note: install requested for command line developer tools" und dann ein GUI-Installationsprogramm, das mir eine Lizenz zeigte, der ich zugestimmt habe, und es hat die Befehlszeilentools heruntergeladen und installiert - oder so behauptete es.

Ich habe dann die Xcode-GUI (Command-Space, Xcode, Return) ausgeführt und es wurde gesagt, dass weitere Software installiert werden muss, aber immer noch kein /usr/include. Aber ich kann mit /usr/bin/clang und /usr/bin/gcc kompilieren - und die Option -v legt nahe, dass sie verwendet werden

InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

Funktionierende Lösung

Dann Maxxxnotiert :

Ich habe einen Weg gefunden. Wenn wir Xcode 10 verwenden, werden Sie feststellen, dass Sie beim Navigieren zum /usr im Finder keinen Ordner namens 'include' mehr sehen, weshalb sich das Terminal über das Fehlen der enthaltenen Header-Dateien beschwert im Ordner 'include'. In den Xcode 10.0 Release Notes heißt es, dass es ein Paket gibt:

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

und Sie sollten dieses Paket installieren, um den Ordner /usr/include zu installieren. Dann solltest du gut gehen.

Wenn alles andere fehlschlägt, lesen Sie das Handbuch oder in diesem Fall die Versionshinweise. Ich bin nicht schrecklich überrascht, dass Apple ihrem Unix-Erbe den Rücken kehren möchte, aber ich bin enttäuscht. Wenn sie vorsichtig sind, können sie mich vertreiben. Danke für die Information.

Nachdem ich das Paket mit dem folgenden Befehl in der Befehlszeile installiert habe, habe ich wieder /usr/include und mein GCC 8.2.0 funktioniert wieder.

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

Befehlszeilentools herunterladen

Wie Vesal in einem wertvollen Kommentar hervorhebt, müssen Sie das Command Line Tools-Paket für Xcode 10.1 unter Mojave 10.14 herunterladen.

Sie müssen sich mit einer Apple ID anmelden, um den Download zu erhalten. Wenn Sie den Download abgeschlossen haben, installieren Sie das Command Line Tools-Paket. Installieren Sie dann die Header wie im Abschnitt 'Arbeitslösung' beschrieben.

Dies funktionierte für mich auf Mojave 10.14.1. Ich muss dies schon heruntergeladen haben, hatte es aber vergessen, als ich diese Frage beantwortete.

Upgrade auf Mojave 10.14.4 und Xcode 10.2

Am oder um den 17.05.2019 habe ich auf Mojave 10.14.4 aktualisiert, und die Xcode 10.2-Befehlszeilentools wurden ebenfalls aktualisiert (oder die Xcode 10.1-Befehlszeilentools wurden auf 10.2 aktualisiert). Der oben gezeigte Befehl open behebt die fehlenden Header. Möglicherweise bleibt noch einiges zu tun, wenn Sie den Haupt-Xcode auf 10.2 aktualisieren und anschließend die Befehlszeilentools und das Header-Paket erneut installieren.

Upgrade auf Xcode 10.3 (für Mojave 10.14.6)

Am 22.07.2019 habe ich über den App Store erfahren, dass das Upgrade auf Xcode 10.3 verfügbar ist und SDKs für iOS 12.4, tvOS 12.4, watchOS 5.3 und macOS Mojave 10.14.6 enthält. Ich habe es auf einem meiner 10.14.5-Computer installiert, ausgeführt und zusätzliche Komponenten wie vorgeschlagen installiert, und es scheint /usr/include intakt zu lassen.

Später am selben Tag entdeckte ich, dass auch macOS Mojave 10.14.6 verfügbar war (Systemeinstellungen Update Software-Update), zusammen mit einem Command Line Utilities-Paket IIRC (es wurde automatisch heruntergeladen und installiert). Durch die Installation des O/S-Updates wurde /usr/include erneut gelöscht, aber der Befehl open oben in der Antwort hat ihn erneut wiederhergestellt. Das Datum, das ich in der Datei für den Befehl open hatte, war 2019-07-15.

214

Nachdem ich alle Antworten ausprobiert hatte, die ich hier und online finden konnte, wurden immer noch Fehler für einige fehlende Header angezeigt. Beim Versuch, pyRFR zu kompilieren, wurde ein Fehler gemeldet, dass stdexcept nicht gefunden wurde, der anscheinend nicht in /usr/include mit den anderen Headern installiert war. Ich fand jedoch heraus, wo es sich in Mojave versteckt hatte und fügte dies am Ende meiner ~/.bash_profile -Datei hinzu:

export CPATH=/Library/Developer/CommandLineTools/usr/include/c++/v1

Danach kann ich pyRFR und andere C/C++ - Programme kompilieren. Laut echo | gcc -E -Wp,-v - suchte gcc am alten Speicherort nach diesen Headern (ohne den /c++/v1), aber nicht am neuen Speicherort.

21
Nigel

Das Problem ist, dass Xcode, insbesondere Xcode 10.x, nicht alles installiert hat. Stellen Sie daher sicher, dass die Befehlszeilentools installiert sind. Geben Sie dies in eine Terminal-Shell ein:

xcode-select --install

starten Sie auch Xcode und stellen Sie sicher, dass die gesamte erforderliche Installation installiert ist (Sie sollten dazu aufgefordert werden, wenn dies nicht der Fall ist.). Da Xcode 10 nicht das vollständige Mac OS SDK installiert, führen Sie das Installationsprogramm unter aus

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

da dieses Paket nicht von Xcode 10 installiert wird.

8
James Rinkevich

Überprüfen Sie unbedingt Xcode Preferences -> Locations.

Die von mir ausgewählten Befehlszeilentools waren für die vorherige Version von Xcode (8.2.1 statt 10.1).

3
bitbrane

Ich habe hier eine großartige Lösung und Erklärung gefunden GitHub-Kommentar . Der Trick:

make SDKROOT=`xcrun --show-sdk-path` MACOSX_DEPLOYMENT_TARGET=

Hat den Job gemacht.

3
Rob

Hatte ähnliche Probleme wie das OP

Problem

katze hallo.c

#include <stdlib.h>
int main() { exit(0); }

hallo klingeln.c

/usr/local/include/stdint.h:2:10: error: #include nested too deeply
etc...

Versuchte Korrektur

Ich habe die neueste Version von XCode installiert. In den Versionshinweisen wurde jedoch darauf hingewiesen, dass die im vorherigen Fix erwähnte Datei von Jonathan hier nicht mehr verfügbar war.

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

Details hier https://developer.Apple.com/documentation/xcode_release_notes/xcode_10_release_notes im Abschnitt Neue Funktionen .


Lösung, die bei mir funktioniert hat ...

Details in diesem Kommentar verwenden, https://github.com/SOHU-Co/kafka-node/issues/881#issuecomment-396197724

Ich habe festgestellt, dass brew doctor gemeldet hat, dass ich nicht verwendete Includes in meinem /usr/local/ -Ordner habe.

Um dies zu beheben, habe ich den Befehl von user HowCrazy verwendet, um die nicht verwendeten Includes zu finden und in einen temporären Ordner zu verschieben.

Hier wiederholt ...

mkdir /tmp/includes
brew doctor 2>&1 | grep "/usr/local/include" | awk '{$1=$1;print}' | xargs -I _ mv _ /tmp/includes

Nach dem Ausführen der Skripte war das Problem mit der Include-Datei behoben. nb: Ich habe dieses Problem kommentiert hier auch.

2
mlo55

Ich hatte dieses Problem und nichts hat funktioniert. Ich habe xcode-select --install ausgeführt und auch /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg installiert.

BACKGROUND

Da ich Probleme mit App Store auf einem neuen Laptop hatte, musste ich den Xcode herunterladen ) Beta Installer von der Apple Website, um Xcode außerhalb des App Store zu installieren. Also hatte ich nur Xcode Beta installiert.

SOLUTION

Dies hat (glaube ich) dazu geführt, dass clang das SDKROOT -Verzeichnis /Applications/Xcode.app/.... nicht gefunden hat, weil sich kein Beta im Pfad befindet, oder vielleicht Xcode Beta installiert es einfach nicht (ich weiß es nicht). Um das Problem zu beheben, musste ich Xcode Beta entfernen und den App Store auflösen Problem bei der Installation der Release-Version.

tldr;

Wenn Sie Xcode Beta haben, versuchen Sie, alles zu bereinigen und die Release-Version zu installieren, bevor Sie die Lösungen ausprobieren, die für andere funktionieren Menschen.

1
Sergio Pulgarin