2017-04-13 17 views
0

私は1つのディレクトリのG ++によるソースファイルから生成されたオブジェクト・ファイルが別のディレクトリに同じソースファイルから生成されたものとは異なることに気づいた。私は、GentooにG ++ 4.9.4使用異なるディレクトリにある同じファイルをコンパイルすると、結果が異なるのはなぜですか?

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 

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. 

2つのオブジェクトファイルが異なる原因は何ですか?

機能的に同等であると私は信用できますか?

答えて

1

-gオプションでファイルをコンパイルすると、コンパイラはセクションヘッダーに多くのデバッグ情報を追加します。

-gオプションをドロップすると完全一致になります。

objdumpを使用して、オブジェクトファイル内の内容を視覚化してみてください。

-g同じコードを持っていてもファイル名が異なる場合でも、オブジェクトファイルのSYMBOL TABLEには生成されたソースファイルの名前も含まれているため、違いがあります。

更新:readelfさらに詳しい情報をお試しください

関連する問題