2017-04-13 2 views
0

Ich bemerkte, dass die Objektdatei aus einer Quelldatei durch g erzeugt ++ in einem Verzeichnis aus dem aus einer identischen Quelldatei in einem anderen Verzeichnis erzeugt unterscheidet:Warum führt die Kompilierung identischer Dateien in verschiedenen Verzeichnissen zu unterschiedlichen Ergebnissen?

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 

ich g ++ 4.9.4 auf gentoo:

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. 

Was könnte dazu führen, dass die beiden Objektdateien unterschiedlich sind?

Kann ich darauf vertrauen, dass sie funktional gleich sind?

Antwort

1

Wenn Sie die Datei mit der Option -g kompilieren, fügt der Compiler viele Debug-Informationen in den Abschnittskopf ein.

Wenn Sie die Option -g löschen, erhalten Sie eine genaue Übereinstimmung.

Versuchen Sie objdump zu verwenden, um zu visualisieren, was sich in der Objektdatei befindet.

Und ohne -g wenn Sie denselben Code haben, aber nur Namen sind verschiedene Datei selbst dann werden Sie Unterschied erhalten, aufgrund SYMBOL TABLE der Objektdatei enthält auch Namen von Quelle, aus der Datei, um sie generiert wurde.

UPDATE: Sie können auch versuchen readelf noch mehr Informationen

Verwandte Themen