Wo ist meine “stdio.h” auf dem Mac?

Lesezeit: 5 Minuten

Benutzer-Avatar
Benutzer3595632

Ich weiß, dass Mac OS X ein Unix-basiertes System ist. Und ich habe gehört, dass sich die C-Standardbibliothek wie stdio.h darin befindet /usr/local/include oder /usr/include. Aber es gibt keine Bibliothek in diesem Verzeichnis. Ich verwende Terminal, um dieses Verzeichnis zu durchsuchen, und ich verwende auch den Befehl like find ./ -iname "stdio.h", aber es kommt nichts raus. Seltsamerweise jedoch gcc -test.c -o test Befehl funktioniert. Wie ist es passiert? Ich möchte wissen, wo sich meine C-Bibliothek befindet. ps Ich benutze auch Xcode. Hängt es mit dieser Anwendung zusammen? Hilf mir! Und ich habe einen AWS EC2-Linux-Server und er hat beide Bibliotheken, auf die ich oben verwiesen habe.

  • Das <stdio.h> Header-Datei ist Teil der C-Standardbibliothek und befindet sich möglicherweise in irgendein Verzeichnis, in dem der Compiler nach Header-Dateien sucht, kann es sich in einem Unterverzeichnis befinden /usr/lib zum Beispiel. Auch der Befehl find ./ -iname "stdio.h" Suchen Sie nach der Datei aus der aktuell Verzeichnis, wenn Sie also zB in Ihrem eigenen Home-Verzeichnis sind, werden Sie die Datei nicht finden.

    – Irgendein Programmierer-Typ

    6. Februar 2015 um 9:59 Uhr


Benutzer-Avatar
Paul R

Wenn Sie Xcode haben, aber das optionale Command Line Tools-Paket nicht installiert haben, werden die Standard-Includes und -Bibliotheken möglicherweise nicht an der üblichen Stelle gefunden. Versuchen:

$ find /Applications/Xcode.app -name stdio.h

und Sie werden wahrscheinlich so etwas sehen wie:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/c++/4.2.1/tr1/stdio.h
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/stdio.h
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/sys/stdio.h
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/include/c++/4.2.1/tr1/stdio.h
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/include/stdio.h
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/include/sys/stdio.h
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/sys/stdio.h
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/c++/4.2.1/tr1/stdio.h
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/stdio.h
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/sys/stdio.h
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/tr1/stdio.h
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/stdio.h

Wie auch immer Sie möchten Installieren Sie das Command Line Tools-Paket, wenn Sie vorhaben, eine Nicht-Xcode-Programmierung (z. B. Befehlszeilenprogrammierung) durchzuführen. Sie sehen dann die üblichen Header und Bibliotheken in /usr/include und /usr/lib.

  • Vielen Dank. Aber nachdem ich Befehlszeilentools installiert habe, hat nur /usr/include eine Bibliotheksdatei. es gibt kein “/usr/local/include” !! Das heißt, wenn ich “cd /usr/local/include” eingebe, kommt der Fehler: No such file or directory. Ist es o.k ??

    – Benutzer3595632

    6. Februar 2015 um 10:17 Uhr

  • @ user3595632 Das ist in Ordnung, /usr/local wird traditionell von Add-On-SDKs und -Paketen verwendet, nicht vom Plattformanbieter.

    – Kartoffelklatsche

    6. Februar 2015 um 10:22 Uhr

  • Das ist richtig – /usr/local dient zum Installieren von Drittanbieter-Sachen, damit es nicht überschrieben wird, wenn Sie das System aktualisieren. Systemkram kommt in /usr.

    – PaulR

    6. Februar 2015 um 10:22 Uhr

Wenn Sie keine Befehlszeilentools installiert haben, können Sie Folgendes ausführen:

xcode-select --install

Es öffnet sich ein Dialogfenster, in dem Sie die Lizenzvereinbarung akzeptieren usw.

(Dies fehlte in den obigen Antworten.)

erstellen/aktualisieren Sie einen Symlink für /usr/include um die Bibliotheken erkennen zu lassen:

sudo ln -sf /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include /usr/include

Den obigen Pfad finden Sie, indem Sie nach stdio.h suchen

find /Applications/Xcode.app -path '*/usr/include/stdio.h'

Ich muss dies bei jedem XCode/MacOS SDK-Update tun, konfrontiert dies heute mit dem XCode 7-Upgrade.

Sobald die Befehlszeilentools installiert sind, können sie nicht erneut installiert werden xcode-selectsodass der Pfad möglicherweise nicht mit einem Mac AppStore-Upgrade aktualisiert wird.

XCode deinstallieren und neu installieren und dann ausführen xcode-select --install könnte den Pfad aktualisieren, ist aber ein Overkill.

Einige Beiträge erwähnen auch xcode-select --switch /Application/Xcode.appaber ich hatte nicht viel Glück damit.

  • Apple erlaubt Ihnen dies nicht mehr: ln: /usr/include: Operation not permitted. (Und ja, ich habe es mit versucht sudound ja, ich habe das Passwort.)

    – John Perry

    4. August 2020 um 15:14 Uhr

Der Hauptgrund ist das Fehlen des Ordners /usr/include, das Installieren von Befehlszeilentools wird ihn manchmal nicht automatisch hinzufügen.

Installieren Sie das Paket unter

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

In meinem Laptop erscheint es an vielen Stellen wie /usr/include/stdio.h und /usr/include/sys/stdio.h und /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/stdio.h.

Benutzer-Avatar
Maxim Chetruska

Wenn Sie Ihre Locate-Datenbank bereits erstellt haben, können Sie sie verwenden

locate stdio.h

Wenn Sie es noch nicht getan haben, bauen Sie es. Das locate Befehl ist großartig!

Benutzer-Avatar
Hackore

Aufgrund von Apples neuem Systemintegritätsschutz (SIP) werden Sie auf diesen Fehler stoßen, wenn Sie versuchen, einen Symlink zu erstellen/aktualisieren /usr/include

ln: /usr/include: Operation not permitted

Anstatt SIP zu deaktivieren, ist es besser, Symlinks in zu erstellen /usr/local/include stattdessen z

ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/* /usr/local/include/

Dies funktioniert für Personen, die CommandLineTools bereits installiert haben und nicht finden konnten stdio.h Innerhalb /usr/include

1366190cookie-checkWo ist meine “stdio.h” auf dem Mac?

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

Privacy policy