linux – 两个目标文件中md5sums的区别

我编译两次相同的.c和.h文件,并获得具有相同大小但不同md5sums的目标文件.
这是与objdump -d的唯一区别:

1)cpcidskephemerissegment.o:文件格式为elf64-x86-64

Disassembly of section .text:

0000000000000000 <_ZN68_GLOBAL__N_sdk_segment_cpcidskephemerissegment.cpp_00000000_B8B9E66611MinFunctionEii>:

2)cpcidskephemerissegment.o:文件格式为elf64-x86-64

Disassembly of section .text:

0000000000000000 <_ZN68_GLOBAL__N_sdk_segment_cpcidskephemerissegment.cpp_00000000_8B65537811MinFunctionEii>:

可能是什么原因?谢谢!

解决方法:

I guess, the compiler didn’t know how to name this namespace and used path to the source file plus some random number.

编译器必须保证未命名的命名空间中的符号不​​与程序中的任何其他符号冲突.默认情况下,这是通过获取源的完整文件名,并向其附加一个随机哈希值来实现的(两次编译相同的源(例如使用不同的宏)是合法的,并将两个对象链接到一个程序中,以及未命名的命名空间符号必须仍然是不同的,所以仅使用没有种子的源文件名是不够的.

如果您知道您没有多次链接同一个源文件,并希望在重新编译时有一个相同的目标文件,那么解决方案是将-frandom-seed =“abcd”添加到您的编译行中(替换“abcd”包含你想要的任何东西;通常使用文件名作为随机种子的值).文件here.

上一篇:MySQL中使用LIMIT分页


下一篇:Mybatis 分页:Pagehelper + 拦截器实现