对象代码,用C语言链接时间

时间:2009-10-14 05:17:26

标签: c linker compilation

编译时,C在链接时间之前生成对象代码。 我想知道目标代码是否是二进制的形式呢? 如果是这样,链接时间接下来会发生什么?

3 个答案:

答案 0 :(得分:6)

Wikipedia说,

  

在计算机科学中,目标文件是   一个有组织的命名集合   对象,通常是这些对象   是计算机指令的序列   以机器代码格式,可能是   由计算机的CPU直接执行。

     

目标文件通常由   作为处理结果的编译器   源代码文件。对象文件包含   紧凑的代码,通常被称为   “二进制”。

     

通常使用linker   生成可执行文件或库   通过合并部分目标文件   一起。嵌入的对象文件   系统通常只包含   机器码但一般来说,对象   文件还包含供...使用的数据   运行时的代码:重定位   信息,堆栈展开   信息,评论,程序符号   (变量和函数的名称)   链接和/或调试目的,和   其他调试信息。

另一个很棒的网站有更详细的信息和有用的图表hereDiagram

答案 1 :(得分:1)

由C编译器生成的目标文件本质上包含二进制代码,每个地方都有一个空洞,其中一个地址应该是未知的(来自其他文件的函数地址 - 包括库 - 被调用,来自其他文件的变量地址)在这一个中访问,...)。

它还包含一个由符号名称索引的表(“x”或“_x”表示变量x,“f”或“_f”表示函数f)。对于每个这样的符号,有一个状态代码(“在此定义”,“此处未定义但使用”,......)以及二进制代码中的空洞地址,当它们变为已知时需要与每个地址一起存档。

如果您使用的是Unix(或Windows上的gcc),则可以使用命令“nm file.o”打印后面的表。

答案 2 :(得分:0)

是的,目标代码通常是二进制形式。只需尝试在您喜欢的文本编辑器中打开它。

您可以了解链接器herehere