2011-03-07 5 views
0

J'ai compilé mon code en utilisant l'utilitaire make et j'ai obtenu les binaires.Qu'est-ce qui pourrait causer une légère différence dans les binaires lorsqu'ils sont compilés à différents moments en utilisant make?

J'ai encore compilé le code avec quelques changements dans makefile (-j inséré à certains points) et j'ai obtenu une légère différence dans les binaires. La différence a été rapportée par "beyond compare". Pour vérifier plus loin, j'ai compilé le code encore sans mes changements dans makefile et a constaté que les binaires sont toujours différents.

Pourquoi se produit-il que le même code compilé à des moments différents aboutit à des binaires légèrement différents (en taille et en contenu)? Comment devrait si vérifier si les changements que j'ai faits sont légitimes et les binaires sont les mêmes logiquement?

N'hésitez pas à me demander des explications supplémentaires.

+1

Votre système de génération génère-t-il du code source? Est-ce qu'il met un horodatage ou une sorte de chaîne aléatoire/nombre comme UUID dans ce code généré? –

Répondre

1

Vous n'avez pas dit ce que vous construisez (C, C++ etc) mais je ne serais pas surpris si c'est un horodatage.

Vous pouvez trouver le format du type binaire que vous construisez (qui dépendra de votre système d'exploitation) et voir s'il est logique qu'il y ait un horodatage dans l'endroit qui change.

Il est probablement plus facile de le faire sur un petit programme d'exemple qui produira un très petit binaire, afin de faciliter la compréhension de tout ce que cela signifie.

0

Les fichiers objet ELF contiennent un horodatage pour la compilation. Ainsi, vous pouvez vous attendre à un fichier objet différent chaque fois que vous compilez (sous Linux ou Solaris). Vous pouvez trouver la même chose avec d'autres systèmes de fichiers objets.

+0

hey !! Merci pour la réponse. Pouvez-vous me guider s'il vous plaît comment vérifier si les changements que j'ai faits fonctionnent ou non !!! J'ai compilé et vérifié le code avec le changement et il n'y avait pas d'erreurs. Mais mon mentor m'a demandé de vérifier s'il y avait une différence dans les binaires. J'ai utilisé -j à certains endroits dans le makefile et l'exécution est plus rapide maintenant !! – ankit

+0

@ankit: Le '-j' dans le processus' make' accélère la construction, mais n'affecte pas le code objet sauf que les horodatages dans les fichiers objets seront plus proches les uns des autres que sans lui. (L'option '-j' n'a pas de signification standard avec un compilateur C que je connais.) Quand vous dites 'si les changements que j'ai faits fonctionnent ou non', qu'attendez-vous de voir? Est-ce que la sortie est différente - comme prévu? Alors oui, ils travaillent. Est-ce que la sortie apparaît plus rapidement qu'avant (ou plus lentement)? Ensuite, les changements ont un effet. Les tailles de fichier et les sommes de contrôle sont-elles différentes? Ensuite, les binaires ont changé. –

+0

@ankit: Aussi - sur quelle plateforme travaillez-vous? Il est souvent utile de mentionner cela dans la question. –

Questions connexes