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

Lesezeit: 14 Minuten

Benutzeravatar von Maxxx
Maxixx

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

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

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

Ich versuchte es mit Laufen xcode-select --install und es war bereits installiert, daher hat es das Problem, das ich jetzt habe, nicht behoben. Ich vermute, dass der Pfad durcheinander ist, da es nicht so aussieht, als könnte er ihn finden gcc nachdem ich angefangen habe, einige Befehle aus anderen Ressourcen zu kopieren und einzufügen, um dieses Problem zu lösen.

Hätte gerne etwas Hilfe dazu.

  • Sie können die Suchpfade von gcc mit überprüfen echo "#include <a.h>" | gcc -v -x c -

    – Matt

    26. September 2018 um 3:52 Uhr

  • Sehr oft, xocde-select --install ist die richtige Lösung. Auf welches o/s hast du upgegradet? Mojave 10.14? Welchen XCode hast du installiert? 10.0 oder eine andere Version?

    – Jonathan Leffler

    26. September 2018 um 4:29 Uhr

  • @JonathanLeffler Ich habe einen Weg gefunden. Wenn wir XCode 10 verwenden, werden Sie feststellen, dass Sie, wenn Sie im Finder zu /usr navigieren, keinen Ordner namens „include“ mehr sehen, weshalb sich das Terminal über das Fehlen der darin enthaltenen Header-Dateien beschwert ‘include’-Ordner. In dieser Freigabeerklärung developer.apple.com/documentation/xcode_release_notes/… (Sie navigieren zu /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg und führen dieses Paket aus, um den Ordner „include“ zu installieren). Dann sollte es Ihnen gut gehen.

    – Maxixx

    26. September 2018 um 7:20 Uhr

  • Wenn alles andere fehlschlägt, lesen Sie das Handbuch! Oder die Release Notes. Ich bin nicht sonderlich überrascht, dass Apple dem Unix-Erbe den Rücken kehren will. Ich bin enttäuscht. Wenn sie vorsichtig sind, könnten sie mich vertreiben. Danke für die Information; Ich werde später damit experimentieren (nachdem ich ein paar Stunden geschlossen habe).

    – Jonathan Leffler

    26. September 2018 um 7:31 Uhr

  • Nach der Installation des Pakets (open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg auf der Kommandozeile), habe ich /usr/include wieder, und mein GCC 8.2.0 funktioniert wieder. Danke für den Hinweis; gut gemacht, es zu finden. Ich schlage vor, Sie schreiben die Antwort auf, da wahrscheinlich andere Leute auf das Problem stoßen werden.

    – Jonathan Leffler

    26. September 2018 um 15:05 Uhr

Benutzeravatar von Jonathan Leffler
Jonathan Leffler

TL;DR

Stellen Sie sicher, dass Sie das neueste Paket „Command Line Tools“ heruntergeladen haben, und führen Sie es über ein Terminal (Befehlszeile) aus:

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

Einige Informationen zu Catalina finden Sie unter Nach dem Upgrade auf Catalina 10.15 kann ein C-Programm auf einem Mac nicht kompiliert werden.


Extrahieren einer halbkohärenten Antwort aus ziemlich umfangreichen Kommentaren…

Präambel

Sehr oft, xcode-select --install war die richtige Lösung, aber es scheint diesmal nicht zu helfen. Haben Sie versucht, die Haupt-Xcode-GUI-Oberfläche auszuführen? Es kann zusätzliche Software für Sie installieren und aufräumen. Ich habe das nach der Installation von Xcode 10.0 gemacht, aber vor einer Woche oder länger, lange vor dem Upgrade auf Mojave.

Ich beobachte das, wenn Ihr GCC installiert ist /usr/local/bin, verwenden Sie wahrscheinlich nicht den GCC von Xcode; das ist normalerweise eingebaut /usr/bin.

Auch ich habe auf macOS 10.14 Mojave und Xcode 10.0 aktualisiert. Allerdings sowohl das System /usr/bin/gcc und System /usr/bin/clang arbeiten 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 selbstgebauter GCC 8.2.0 keine Header findet /usr/includedas ist parallel zu Ihrem Problem mit /usr/local/bin/gcc finde auch keine Header.

Ich habe ein bisschen verglichen, und meine Mojave-Maschine hat keine /usr/include überhaupt noch /usr/bin/clang kann OK kompilieren. Eine Überschrift (_stdio.hmit führendem Unterstrich) war in meiner alten /usr/include; es fehlt jetzt (daher mein Problem mit GCC 8.2.0). Ich rannte xcode-select --install und es hieß “xcode-select: note: install requested for command line developer tools“ und führte dann ein GUI-Installationsprogramm aus, das mir eine Lizenz zeigte, der ich zugestimmt hatte, und es lud die Befehlszeilentools herunter und installierte sie – oder so behauptete es.

Ich habe dann die Xcode-GUI (Befehlsraum, Xcode, Return) ausgeführt und es wurde gesagt, dass weitere Software installiert werden muss, aber immer noch nein /usr/include. Aber ich kann mit kompilieren /usr/bin/clang und /usr/bin/gcc – und die -v Option schlägt vor, dass sie verwenden

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

Funktionierende Lösung

Dann notierte Maxxx:

Ich habe einen Weg gefunden. Wenn wir Xcode 10 verwenden, werden Sie feststellen, dass, wenn Sie zu navigieren /usr Im Finder sehen Sie keinen Ordner namens „include“ mehr, weshalb sich das Terminal über das Fehlen der Header-Dateien beschwert, die im Ordner „include“ enthalten sind. In dem Versionshinweise zu Xcode 10.0es heißt, es gibt ein Paket:

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

und Sie sollten dieses Paket installieren, um die /usr/include Ordner installiert. Dann sollte es Ihnen gut gehen.

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

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

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

Herunterladen von Befehlszeilentools

Wie Vesal in einem wertvollen Kommentar betont, müssen Sie das Command Line Tools-Paket für Xcode 10.1 auf Mojave 10.14 herunterladen, und Sie können dies tun von:

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

Dies hat bei mir unter Mojave 10.14.1 funktioniert. Ich muss das schon einmal heruntergeladen haben, aber ich hatte es vergessen, als ich diese Frage beantwortete.

Aktualisieren Sie 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). Das open Der oben gezeigte Befehl hat die fehlenden Header behoben. Es kann noch Abenteuer geben, wenn Sie den Haupt-Xcode auf 10.2 aktualisieren und dann die Befehlszeilentools und das Header-Paket neu installieren.

Upgrade auf Xcode 10.3 (für Mojave 10.14.6)

Am 22.07.2019 erhielt ich über den App Store die Nachricht, 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-Rechner installiert und es ausgeführt und zusätzliche Komponenten installiert, wie es vorgeschlagen wurde, und es scheint gegangen zu sein /usr/include intakt.

Später am selben Tag entdeckte ich, dass auch macOS Mojave 10.14.6 verfügbar war (Systemeinstellungen ⟶ Softwareaktualisierung), zusammen mit einem Command Line Utilities-Paket IIRC (es wurde automatisch heruntergeladen und installiert). Die Installation des o/s-Updates hat erneut zu einem Auslöschen geführt /usr/includeaber die open Der Befehl oben in der Antwort hat ihn wiederhergestellt. Das Datum hatte ich in der Akte für die open Befehl war 2019-07-15.

Upgrade auf XCode 11.0 (für Catalina 10.15)

Das Upgrade auf XCode 11.0 (“enthält Swift 5.1 und SDKs für iOS 13, tvOS 13, watchOS 6 und macOS Catalina 10.15”) wurde am 21.09.2019 veröffentlicht. Ich wurde über „Updates verfügbar“ benachrichtigt und heruntergeladen und auf Computern mit macOS Mojave 10.14.6 über die App Store App (Registerkarte „Updates“) ohne Probleme und ohne Probleme heruntergeladen und installiert /usr/include. Unmittelbar nach der Installation (bevor ich die Anwendung selbst ausgeführt habe) habe ich eine Neukompilierung versucht und mir wurde gesagt:

Um der Xcode/iOS-Lizenz zuzustimmen, sind Administratorrechte erforderlich. Führen Sie bitte „sudo xcodebuild -license“ aus und wiederholen Sie diesen Befehl.

Läuft das (sudo xcodebuild -license) erlaubte mir, den Compiler auszuführen. Seitdem führe ich die Anwendung aus, um zusätzliche benötigte Komponenten zu installieren. immer noch kein Problem. Es bleibt abzuwarten, was passiert, wenn ich auf Catalina selbst aktualisiere – aber meine macOS Mojave 10.14.6-Maschinen sind im Moment (2019-09-24) beide in Ordnung.

  • ah danke, dass du das geschrieben hast. Sehr geschätzt. Prost!

    – Maxixx

    27. September 2018 um 9:25 Uhr

  • Bei mir gelöst!!! Vielen Dank, dass Sie sich die Zeit genommen haben, dies zu schreiben!

    – budekatude

    2. Oktober 2018 um 21:22 Uhr

  • GRUMM!!! Mit dem 10.14.1-Update haben sich die Dinge erneut geändert – oder zumindest scheinen sie sich erneut geändert zu haben. Für mich scheint es, dass das o / s-Update weggefegt ist /usr/includeund das in der obigen Antwort aufgeführte Paket ist in nicht vorhanden /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg und xcode-select --install sagt, dass die Befehlszeilentools derzeit nicht verfügbar sind.

    – Jonathan Leffler

    2. November 2018 um 22:27 Uhr

  • Verdammter Apfel. Sie können nicht einfach Dinge verlassen, die funktionieren, sie müssen Dinge bewegen, Schritte hinzufügen und Abwanderung erzeugen.

    Benutzer246672

    31. Dezember 2018 um 11:21 Uhr

  • In der Hoffnung, dass Suchmaschinen diese Antwort finden, löst sich die obige Anleitung ein fatal error: bits/ctype_base.h: No such file or directory: #include <bits/ctype_base.h> beim Kompilieren von GCC 7.4.0 mit libstdc++ auf Mojave für mich

    – Adam Lindberg

    14. Januar 2019 um 18:31 Uhr

Nachdem ich jede Antwort ausprobiert hatte, die ich hier und online finden konnte, erhielt ich immer noch Fehler für einige fehlende Header. Beim Versuch, pyRFR zu kompilieren, bekam ich Fehler stdexcept nicht gefunden, die anscheinend nicht installiert war /usr/include mit den anderen Überschriften. Ich fand jedoch heraus, wo es sich in Mojave versteckte, und fügte dies am Ende meiner hinzu ~/.bash_profile Datei:

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

Danach kann ich jetzt pyRFR und andere C/C++-Programme kompilieren. Entsprechend echo | gcc -E -Wp,-v -gcc hat am alten Speicherort nach diesen Headern gesucht (ohne die /c++/v1), aber nicht der neue Speicherort, also hat es das Hinzufügen zu CFLAGS behoben.

  • Nichts hat funktioniert, aber dieser hat es getan. Vielen Dank!!

    – Felix

    13. April 2019 um 18:36 Uhr

  • wickedsickbrothnx

    – Davis Dulin

    18. April 2019 um 17:18 Uhr

  • Das hat bei mir auch für macOS Big Sur funktioniert.

    – Pablo Reyes

    13. Juli 2021 um 20:02 Uhr

Wenn du

  • aktualisiert auf Mojave 10.14.6
  • dein /usr/include wurde wieder gelöscht
  • Das in @Jonathan-lefflers Antwort erwähnte Paket existiert nicht mehr
    The file /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg does not exist. und
  • Xcode beschwert sich, dass Kommandozeilen-Tools bereits installiert sind
    xcode-select --install
    xcode-select: error: command line tools are already installed, use "Software Update" to install updates

Was mir dann geholfen hat, das erwähnte Paket wiederherzustellen, war das Löschen des gesamten Pakets CommandLineTools Mappe
(sudo) rm -rf /Library/Developer/CommandLineTools und installieren Sie es neu xcode-select --install.

  • Exzellent! Nach Ihren Schritten, die macOS_SDK_headers_for_macOS_10.14.pkg verfügbar werden, und der Befehl open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg tat, was zu tun war. Tausend Dank!!

    – Bruno Ambrozio

    14. Oktober 2019 um 18:56 Uhr

  • Bei mir hat folgendes funktioniert: export CPATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/include

    – rbieber

    22. November 2019 um 22:59 Uhr


  • Vielen Dank! Ich steckte fest, aber das funktionierte wirklich für mich mit Mojave 10.4.6 und XCode 11.3.1

    – Simeon G

    1. Februar 2020 um 15:36 Uhr

  • Jedes Mal, wenn Apple ein Systemupdate veröffentlicht, muss ich dieses Problem mit Clion auf andere Weise beheben.

    – Igonejack

    14. März 2020 um 14:17 Uhr

Benutzeravatar von James Rinkevich
James Rinkevich

Das Problem ist, dass Xcode, insbesondere Xcode 10.x, nicht alles installiert hat, stellen Sie also sicher, dass die Befehlszeilentools installiert sind, geben Sie Folgendes 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 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.

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

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

Hat den Job gemacht.

Benutzeravatar von HappyFace
Glückliches Gesicht

ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk' könnte dir helfen. Es hat mein Problem behoben.

HINWEIS: Das Folgende ist wahrscheinlich stark kontextabhängig und zeitlich begrenzt vor der Umstellung/allgemeinen Verfügbarkeit von macos Catalina 10.15. Neuer Laptop. Ich schreibe dies am 01.10.2019.

Diese besonderen Umstände sind, glaube ich, der Grund für Bauprobleme bei mir. Sie gelten möglicherweise nicht in den meisten anderen Fällen.

Kontext:

  • Macos 10.14.6 Mojave, Xcode 11.0, kurz vor dem Launch von macos Catalina 10.15. Neu erworbenes Macbook Pro.

  • Ausfall an pip install psycopg2was im Grunde ein Python-Paket ist, das aus der Quelle kompiliert wird.

  • Einige der vorgeschlagenen Anpassungen habe ich in den hier gegebenen Antworten bereits vorgenommen.

Meine Fehler:

pip install psycopg2
Collecting psycopg2
  Using cached https://files.pythonhosted.org/packages/5c/1c/6997288da181277a0c29bc39a5f9143ff20b8c99f2a7d059cfb55163e165/psycopg2-2.8.3.tar.gz
Installing collected packages: psycopg2
  Running setup.py install for psycopg2 ... error
    ERROR: Command errored out with exit status 1:
     command: xxxx/venv/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/bk/_1cwm6dj3h1c0ptrhvr2v7dc0000gs/T/pip-install-z0qca56g/psycopg2/setup.py'"'"'; __file__='"'"'/private/var/folders/bk/_1cwm6dj3h1c0ptrhvr2v7dc0000gs/T/pip-install-z0qca56g/psycopg2/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/var/folders/bk/_1cwm6dj3h1c0ptrhvr2v7dc0000gs/T/pip-record-ef126d8d/install-record.txt --single-version-externally-managed --compile --install-headers xxx/venv/include/site/python3.6/psycopg2


...
/usr/bin/clang -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -pipe -Os -isysroot/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -DPSYCOPG_VERSION=2.8.3 (dt dec pq3 ext lo64) -DPG_VERSION_NUM=90615 -DHAVE_LO64=1 -I/Users/jluc/kds2/py2/venv/include -I/opt/local/Library/Frameworks/Python.framework/Versions/3.6/include/python3.6m -I. -I/opt/local/include/postgresql96 -I/opt/local/include/postgresql96/server -c psycopg/psycopgmodule.c -o build/temp.macosx-10.14-x86_64-3.6/psycopg/psycopgmodule.o

    clang: warning: no such sysroot directory: 
'/Applications/Xcode.app/Contents/Developer/Platforms
                              ❌👇the real error👇❌
/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk' [-Wmissing-sysroot]
    In file included from psycopg/psycopgmodule.c:27:
    In file included from ./psycopg/psycopg.h:34:
    /opt/local/Library/Frameworks/Python.framework/Versions/3.6/include/python3.6m/Python.h:25:10: fatal error: 'stdio.h' file not found
                             ❌👆 what I thought was the error 👆❌
    #include <stdio.h>
             ^~~~~~~~~
    1 error generated.

    It appears you are missing some prerequisite to build the package 


Was ich bisher gemacht habe, ohne etwas zu reparieren:

  • xcode-select --install
  • xcode installiert
  • open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

Immer noch der gleiche Fehler auf stdio.h.

die es an mehreren Stellen gibt:

(venv) jluc@bemyerp$ mdfind -name stdio.h
/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/sys/stdio.h
/usr/include/_stdio.h
/usr/include/secure/_stdio.h
/usr/include/stdio.h  ✅ 👈 I believe this is the one that's usually missing.
                            but I have it.
/usr/include/sys/stdio.h
/usr/include/xlocale/_stdio.h

Gehen wir also zu diesem ersten Verzeichnis clang beschwert sich und schau:

(venv) jluc@gotchas$ cd /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs
(venv) jluc@SDKs$ ls -l
total 0
drwxr-xr-x  8 root  wheel  256 Aug 29 23:47 MacOSX.sdk
drwxr-xr-x  4 root  wheel  128 Aug 29 23:47 DriverKit19.0.sdk
drwxr-xr-x  6 root  wheel  192 Sep 11 04:47 ..
lrwxr-xr-x  1 root  wheel   10 Oct  1 13:28 MacOSX10.15.sdk -> MacOSX.sdk  👈
drwxr-xr-x  5 root  wheel  160 Oct  1 13:34 .

Hah, wir haben einen Symlink für MacOSX10.15.sdkaber keine für MacOSX10.14.sdk. Hier ist mein erster clang Fehler wieder:

clang: warning: no such sysroot directory: '/Applications/Xcode.app/.../Developer/SDKs/MacOSX10.14.sdk' [-Wmissing-sysroot]

Meine Vermutung ist, dass Apple bei seiner xcode-Konfiguration die Waffe übersprungen hat und bereits denkt, dass sie auf Catalina sind. Da es sich um einen neuen Mac handelt, ist die alte Konfiguration für 10.14 nicht vorhanden.

DIE REPARATUR:

Lassen Sie uns 10.14 auf die gleiche Weise wie 10.15 symbolisch verlinken:

ln -s MacOSX.sdk/ MacOSX10.14.sdk

Übrigens, wenn ich in dieses SDK-Verzeichnis gehe, finde ich:

...
./usr/include/sys/stdio.h
./usr/include/stdio.h
....

ERGEBNIS:

pip install psycopg2 funktioniert.

Hinweis: Der eigentliche Pip-Installationsbefehl enthielt keinen Hinweis darauf MacOSX10.14.sdkdas zu einem späteren Zeitpunkt kam, möglicherweise durch den Python-Installationsmechanismus, der die Betriebssystemversion überprüfte.

  • Die pip benutzt du? Ich denke, das könnte das Hauptproblem sein.

    – Franklin Yu

    25. Juni 2020 um 7:17 Uhr

1425490cookie-checkC-Programm kann auf einem Mac nach dem Upgrade auf Mojave nicht kompiliert werden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy