gcc为不同的文件名生成不同的结果

时间:2014-07-29 15:58:05

标签: c gcc

为什么gcc为不同的源文件名生成不同的可执行文件?

测试我有这个名为test.c和test2.c的c-programm:

int main(){}

“gcc test.c -o test”和“gcc test2.c -o test2”生成不同的输出文件。使用十六进制编辑器,我可以看到它的源文件名仍然隐藏在其中。剥离文件仍然会导致不同的结果(源文件名已消失)。为什么gcc以这种方式运作?我也测试了clang和tcc。 Clang的行为与gcc类似,而tcc为不同的文件名生成相同的结果?

gcc版本4.9.1(Debian 4.9.1-1)

clang 3.4.2-4

tcc版本0.9.25

2 个答案:

答案 0 :(得分:4)

对两个二进制文件的hexdump执行diff会在偏移0x0280附近显示一个小差异。查看各个部分(通过objdump -x),差异会显示在.note.gnu.build-id部分中。我的猜测是,这提供了某种UUID,用于区分其他类似代码的不同构建,以及验证调试信息(引用here,大约三分之一)。

答案 1 :(得分:-1)

gcc的-o选项是指定输出文件。如果你给他不同的-o目标,它将生成不同的文件。

gcc test.c -o foo

你有一个foo可执行文件。

另外,请注意,如果没有-o选项,gcc将输出a.out可执行文件。