编译时,C在链接时间之前生成目标代码。我想知道目标代码是否是二进制的形式呢?如果是这样,链接时间接下来会发生什么?
由C编译器生成的目标文件实质上包含二进制代码,每个地方都有一个空洞,其中地址应该是未知的(来自其他文件的函数地址 - 包括库 - 调用,来自其他文件的变量地址)在这一个,...)。
它还包含一个由符号名称索引的表(变量x
为“x”或“_x”,函数f
为“f”或“_f”)。对于每个这样的符号,有一个状态代码(“在此定义”,“此处未定义但使用”,......)以及二进制代码中的空洞地址,当它们变为已知时需要与每个地址一起存档。
如果您使用的是Unix(或Windows上的gcc),则可以使用命令“nm file.o”打印后面的表。