Dopo una lunga sequenza di debug, ho ridotto il mio problema a un unico file. E il problema è che il file viene compilato in modo diverso in due diverse directory, quando tutto il resto è lo stesso.In che modo la compilazione dello stesso codice sorgente genera file oggetto diversi?
Sto utilizzando il compilatore gcc di CodeSourcery (gcc versione 4.3.3, Sourcery G ++ Lite 2009q1-161) per compilare un file semplice. Lo stavo usando in un modulo senza problemi e poi l'ho copiato su un altro modulo per usarlo. Quando si compila, il file oggetto è significativamente diverso. La riga di comando per compilare i due file è identica (ho usato la cronologia di linux per essere sicuro), e i 3 file includono anche copie identiche (controllate con diff).
Ho fatto un confronto binario sui due file oggetto e hanno un sacco di differenze di singoli byte sparsi in giro. Ho fatto un objdump -D di entrambi e li ho confrontati e ci sono molte differenze. Ecco dump1, dump2 e diff. La riga di comando è " arm-none-eabi-gcc --std = gnu99 -Wall -O3 -g3 -ggdb -Wextra -Wno-unused -c crc.c -o crc.o".
Com'è possibile? Ho anche compilato con -S al posto di -c e guardato l'output dell'assembler e questo è identico tranne che per il percorso della directory. Quindi, come può il file oggetto essere diverso?
Il mio vero problema è che quando provo a collegare il file oggetto per dump2 al mio programma, ottengo errori di riferimento non definiti, quindi qualcosa nell'oggetto è sbagliato, mentre l'oggetto per dump1 non riceve tali errori e collegamenti fini.
Apparentemente c'è un tag [tag: riproducibilità binaria] per questo. Ho visto la stessa cosa con questo compilatore. La maggior parte di * diff * mostra diverse selezioni di registro o offset di file, ma ha le stesse funzionalità di base. Vedi: [Debian riproducible builds] (https://wiki.debian.org/ReproducibleBuilds). Naturalmente è possibile che l'output sia diverso. È il tuo problema? Penso che il tuo problema sia qualcos'altro. –
Inoltre: [SO binario che cambia in ogni build] (http://stackoverflow.com/questions/4140329/binary-object-file-changing-in-each-build), ecc. –
Si potrebbe provare a compilare con '-O0 'per vedere se le differenze persistono. – markgz