it-swarm.com.de

Wo sucht gcc nach C- und C ++ - Header-Dateien?

Wo sucht gcc auf einem Unix-System nach Header-Dateien?

Ich habe heute Morgen ein wenig nach System-Header-Dateien gesucht, daher dachte ich, dies wären gute Informationen, die ich hier haben sollte.

168
Bill the Lizard
`gcc -print-prog-name=cc1plus` -v

Dieser Befehl fragt gcc, welchen C++ Präprozessor er verwendet, und fragt dann diesen Präprozessor, wo er nach Includes sucht.

Sie erhalten eine zuverlässige Antwort auf Ihr spezielles Setup.

Ebenso gilt für den Präprozessor C :

`gcc -print-prog-name=cpp` -v
206
Drew Dormann

Außerdem sucht gcc in den Verzeichnissen, die nach dem -I Möglichkeit.


35
robert

Sie können eine Datei erstellen, die versucht, einen falschen Systemheader einzuschließen. Wenn Sie gcc in einem solchen Quellcode im ausführlichen Modus ausführen, werden alle System-Include-Speicherorte aufgelistet, während nach dem falschen Header gesucht wird.

$ echo "#include <bogus.h> int main(){}" > t.c; gcc -v t.c; rm t.c

[..]

#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /usr/lib/gcc/i686-Apple-darwin9/4.0.1/include
 /usr/include
 /System/Library/Frameworks (framework directory)
 /Library/Frameworks (framework directory)
End of search list.

[..]

t.c:1:32: error: bogus.h: No such file or directory
24
diciu

Das CPP Section des GCC Manual gibt an, dass sich Header-Dateien in den folgenden Verzeichnissen befinden können:

GCC sucht an verschiedenen Stellen nach Überschriften. Auf einem normalen Unix-System sucht es nach Headern, die mit #include in: angefordert werden, wenn Sie es nicht anders anweisen.

 /usr/local/include
 libdir/gcc/target/version/include
 /usr/target/include
 /usr/include

Bei C++ - Programmen wird zunächst auch nach/usr/include/g ++ - v3 gesucht.

17
Bill the Lizard
g++ -print-search-dirs
gcc -print-search-dirs
8
user292283

Rufen Sie GCC folgendermaßen auf, um alle Verzeichnisse auszudrucken, in denen nach Systemheadern gesucht werden soll:

$ LC_ALL=C gcc -v -E -xc - < /dev/null 2>&1 | 
  LC_ALL=C sed -ne '/starts here/,/End of/p'

die Ausgabe des Formulars erzeugen

#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/x86_64-linux-gnu/5/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.

Wenn Sie haben -I- Familienoptionen in der Befehlszeile wirken sich auf den Ausdruck aus.

(Der Befehl sed dient dazu, alle anderen Junk-Einträge zu entfernen, die dieser Aufruf ausgibt, und der Befehl LC_ALL=C soll sicherstellen, dass der Befehl sed funktioniert - die Phrasen "starts here" und "End of search list" are translated IIRC.)

8
zwol

Die Pfade, unter denen der Compiler nach den Header-Dateien sucht, können mit dem folgenden Befehl überprüft werden:

cpp -v

Wenn Sie # include "" deklarieren, sucht der Compiler zuerst im aktuellen Verzeichnis der Quelldatei und falls nicht gefunden, setzt die Suche in den oben abgerufenen Verzeichnissen fort.

Wenn Sie # include <> deklarieren, sucht der Compiler direkt in den Verzeichnissen, die Sie mit dem obigen Befehl erhalten haben.

Quelle: - http://commandlinefanatic.com/cgi-bin/showarticle.cgi?article=art026

4
Suhas Chikkanna

Sie können den (zusätzlichen) Include-Pfad für ein C-Programm aus der Bash anzeigen, indem Sie Folgendes überprüfen:

echo $C_INCLUDE_PATH

Wenn dieses Feld leer ist, kann es folgendermaßen geändert werden, um standardmäßige Include-Speicherorte hinzuzufügen:

export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/include
1
user2844647

Dies sind die Verzeichnisse, in denen gcc standardmäßig nach den angegebenen Header-Dateien sucht (vorausgesetzt, die Header-Dateien sind in den Pfeilen <> enthalten). 1./usr/local/include/- wird für Header-Dateien von Drittanbietern verwendet. 2./usr/include/- wird für Systemheaderdateien verwendet.

Wenn Sie Ihre benutzerdefinierte Header-Datei an einem anderen Ort als in den oben genannten Verzeichnissen ablegen möchten, können Sie diese wie folgt einfügen: 1. Verwenden Sie Anführungszeichen ("./custom_header_files/foo.h") mit Dateipfad anstelle von Pfeilen in der include-Anweisung. 2. Verwenden Sie beim Kompilieren des Codes die Option -I. gcc -I/home/user/custom_headers/-c foo.c -p foo.o Grundsätzlich weist die Option -I den Compiler an, zuerst in das mit der Option -I angegebene Verzeichnis zu schauen (bevor die Standardverzeichnisse überprüft werden) Mit der Option -I können die Header-Dateien mit Chevrons eingeschlossen werden.

0
akhil tiwari