在C或C++编译的各个阶段,我知道会生成一个目标文件(即any_name.o文件)。此.o文件包含什么内容?我无法打开它,因为它是一个二进制文件。
有谁能帮帮我吗?目标文件的内容主要依赖于我们在Unix上使用的编译器吗?
发布于 2010-06-15 21:38:23
对象文件可以包含一堆东西:基本上,它是以下列表的一部分或全部:
链接器将一堆目标文件转换为可执行文件,方法是匹配所有导入和导出,并修改编译后的代码,以便调用正确的函数。
发布于 2010-06-15 21:41:06
有几种标准化的格式(COFF,Unix上的ELF ),基本上它们是用于可执行文件的相同格式的变体,但缺少一些信息。这些缺失的信息将在链接时完成。
对象文件格式基本上包含相同的信息:
编译产生的
当将对象链接在一起时,引用外部符号的代码部分将被实际的值替换(好吧,这仍然过于简化,在运行程序时将在加载时完成最后一部分,但这就是我们的想法)。
目标文件还可能包含解析导入和导出所需的更多符号信息(对于调试非常有用)。可以使用strip命令删除该信息。
发布于 2010-06-15 21:35:39
首先阅读wiki page。您可以使用来检查这样的文件:)
https://stackoverflow.com/questions/3045603
复制相似问题