我注意到一个目录中g ++从源文件生成的目标文件与另一个目录中相同源文件生成的目标文件不同:
tools_io $ diff -s MoveStats.h ../kernel/MoveStats.h
Files MoveStats.h and ../kernel/MoveStats.h are identical
tools_io $ diff -s MoveStats.cpp ../kernel/MoveStats.cpp
Files MoveStats.cpp and ../kernel/MoveStats.cpp are identical
tools_io $ g++ -c MoveStats.cpp -I ../common -o MoveStats.o -g -Wall -fopenmp
tools_io $ cd ../kernel
kernel $ g++ -c MoveStats.cpp -I ../common -o MoveStats.o -g -Wall -fopenmp
kernel $ cd ../tools_io
tools_io $ diff MoveStats.o ../kernel/MoveStats.o
Binary files MoveStats.o and ../kernel/MoveStats.o differ
tools_io $ ls -l MoveStats.o ../kernel/MoveStats.o
-rw-r--r-- 1 jody morpho 20632 Apr 13 11:22 ../kernel/MoveStats.o
-rw-r--r-- 1 jody morpho 20632 Apr 13 11:21 MoveStats.o
tools_io $ nm MoveStats.o > nmlocms.txt
tools_io $ nm ../kernel/MoveStats.o > nmkerms.txt
tools_io $ diff -s nmlocms.txt nmkerms.txt
Files nmlocms.txt and nmkerms.txt are identical
我在gentoo上使用g ++ 4.9.4:
tools_io $ g++ --version
g++ (Gentoo 4.9.4 p1.0, pie-0.6.4) 4.9.4
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
什么可能导致两个目标文件不同?
我能相信他们在功能上是平等的吗?
答案 0 :(得分:1)
在使用-g
选项编译文件时,编译器会在节头中添加大量调试信息。
如果您放弃-g
选项,那么您将获得完全匹配。
尝试使用objdump
来查看目标文件中的内容。
没有-g
如果你有相同的代码,但只是文件名不同,那么你会得到不同,因为目标文件的SYMBOL TABLE
也包含生成它的源文件的名称。
更新:您还可以尝试readelf
更多信息