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.
Wo ist meine “stdio.h” auf dem Mac?
Benutzer3595632
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-select
sodass 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.app
aber 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 versuchtsudo
und 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
.
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!
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
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 Befehlfind ./ -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