2012-04-13 10 views
0

ich eine example.c Datei kompilieren, die die Zeile hat:ist Header-Datei Pfadreferenz in C-Datei in Objektdatei enthalten (.o)

#include "parse/properties/properties.h" 

Der Compiler erstellt eine example.o Datei. Ist der Pfad zur Header-Datei in der example.o-Datei enthalten? oder ist diese Information extern?

+2

ich sagen würde, unterstützen dass es völlig auf die Implementierung ankommt. – unwind

Antwort

3

Es kann oder auch nicht, das Objektdateiformat ist nicht standardisiert (der Standard erwähnt nicht einmal "Objektdateien"). Ein Compiler fügt das # include möglicherweise zu Debuggingzwecken ein oder überspringt es vollständig.

Beachten Sie auch, dass # include'ing vom Compiler ausgeführt wird, was der Standard als die erste Phase in der Übersetzung beschreibt, unter Verwendung eines textuellen Präprozessors; Die # include-Anweisung weist den Präprozessor an, den Inhalt einer anderen Datei wortwörtlich zu kopieren und einzufügen. Dies geschieht, lange vor dem eigentlichen Objektdateien

erzeugt werden würde
+0

Woher weiß der Linker, welche Header einer bestimmten .o-Datei entsprechen? – Olof

+0

@Olof Es sollte nicht notwendig sein. Das ist nicht der Punkt des Linkers. Außerdem wird jedes Binärformat unterschiedlich sein. –

+0

Beachten Sie auch, dass es nur den Dateinamen, aber nicht den Pfad enthalten kann. Da der Debugger in projektbasierten Systemen möglicherweise über eigenen Zugriff auf die Include-Pfade verfügt, ist der Pfad nicht erforderlich und möglicherweise verwirrend. –

1

Es ist definiert Umsetzung aber allgemein, wenn Sie mit Debugging-Optionen (zB -g in gcc) kompilieren die Dateipfade enthalten sind Sie bei der Fehlersuche

+0

@San Da die Antworten innerhalb einer Minute gepostet wurden, waren sie möglicherweise für die andere Partei nicht sichtbar. –