【问题标题】:is header file path reference in .c file included in object file (.o)是目标文件 (.o) 中包含的 .c 文件中的头文件路径引用
【发布时间】:2012-04-13 12:57:23
【问题描述】:

我编译了一个 example.c 文件,其中包含以下行:

#include "parse/properties/properties.h"

编译器创建一个 example.o 文件。头文件的路径是否包含在 example.o 文件中?还是这些信息是外部的?

【问题讨论】:

  • 我会说这完全取决于实现。

标签: c compiler-construction linker object-files


【解决方案1】:

目标文件格式可能没有标准化(标准甚至没有提到“目标文件”)。编译器可能会插入 #include 以进行调试,也可能会完全跳过它。

另请注意,#include'ing 是由编译器在标准描述的第一阶段翻译中使用文本预处理器完成的; #include-directive 告诉预处理器逐字复制并替换另一个文件的内容。这在生成实际目标文件之前很久就发生了

【讨论】:

  • 链接器如何知道某个.o文件对应的头文件?
  • @Olof 没必要。这不是链接器的重点。此外,每种二进制格式都会有所不同。
  • 还要注意它可以只包含文件名,但不能包含路径。由于在基于项目的系统中,调试器可能对包含路径有自己的访问权限,因此该路径不是必需的,并且可能会造成混淆。
【解决方案2】:

它是实现定义的,但通常当您使用调试选项(例如 gcc 中的-g)进行编译时,会包含文件路径以帮助您进行调试

【讨论】:

  • @San 因为答案是在一分钟内发布的,所以对方可能看不到它们。
猜你喜欢
  • 1970-01-01
  • 2021-07-11
  • 2014-10-21
  • 1970-01-01
  • 2019-06-15
  • 1970-01-01
  • 2012-12-16
  • 1970-01-01
  • 2012-01-18
相关资源
最近更新 更多