2009-11-02 7 views
1

Cela a été demandé auparavant pour VC++ mais je suis intéressé par la réponse de Solaris.Est-ce que Solaris cc est incorporé dans un fichier exécutable différent pour différentes compilations?

Je compiler et lier le code trivial C suivant:

#include <stdio.h> 

int main() { 
    printf("Hello world!\n"); 
    return 0; 
} 

en utilisant la commande:

cc -o hello1 hello.c 

et faisant deux ou trois fois pour obtenir executables hello2 et hello3. Ceci est fait sur la même machine avec le même compilateur et dans le même répertoire juste à des moments différents.

Les tailles des exécutables sont les mêmes mais diff indique que les binaires sont différents et cmp -l devient fou avec une longue liste d'emplacements différents. Quelqu'un sait-il ce que cc incorpore dans les exécutables pour les différencier? Horodatages?

Éditer: L'effacement des exécutables comme Chris suggéré ci-dessous fait que les deux exécutables sont identiques.

acclamations,

+0

Regardez ELF peut-être. – LB40

+1

Tout à fait un commentaire en retard, mais voir http://stackoverflow.com/a/36591217/211665 pour une explication plus précise et une méthode pour comprendre les différences réelles. – jlliagre

+0

Merci pour le pointeur @jlliagre –

Répondre

2

Si vous utilisez « od -c » sur les deux binaires, puis utilisez un côte à côte programme diff, vous pouvez avoir une idée de ce que sont les différences. Dans le passé, quand j'ai étudié les compilateurs de Sun, c'est généralement une chaîne de date. Vous pouvez également essayer de supprimer l'exécutable pour voir si cela supprime la section ELF qui a la différence.

+0

@Chris, bravo. Je vais essayer de supprimer les exécutables. –

+0

@Chris, merci. J'ai mis à jour la question pour dire que dépouiller les exécutables a fait une différence. –

1

Si vous prenez exactement le même code source et le compilez deux fois avec le compilateur de Sun, et non obtenez deux fichiers dupliqués-binaires exacts. Il y aura des différences mineures. Pour autant que je sache, il s'agit surtout de problèmes de date/heure.

Questions connexes