Se connecter avec
S'enregistrer | Connectez-vous

Génération de DLL

Dernière réponse : dans Programmation

Est-ce que quelqu'un peut m'expliquer pourquoi, si je génère 2 fois la même DLL, j'obtiens des différences?
Je m'explique: j'ai un code C++, je compile et ilnk, j'obtiens une DLL. Puis je ne CHANGE RIEN au code, et je recompile pour re-générer la DLL. Les 2 DLL ont la même taille, mais il y a toujours 2 ou 3 octets qui diffèrent.
Pourquoi cela?
Y a-t-il moyen de l'éviter et d'avoir toujours EXACTEMENT la même DLL générée?

Merci de votre aide,
Eric

Autres pages sur : generation dll

Lassé par la pub ? Créez un compte

Désolé... Effectivement, j'aurais pu être plus précis.
J'uilise Microsoft Visual Studio 2003. Difficile de te donner toutes les options de compilation tellement il y en a, mais en gros je compile en mode "Release" sans aucune information de debug. A toute fin utile, je peux donner la ligne de commande:
/OUT:"c:/MonRepertoire/MaDLL.dll" /INCREMENTAL:NO /NOLOGO /DLL /SUBSYSTEM:WINDOWS /OPT:REF /OPT:ICF /IMPLIB:"Release/MaDLL.lib" /MACHINE:X86 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

Effectivement, j'utilise un éditeur hexa pour voir les différences.
En fait, je pense que MSVC fait ça pour que toute DLL générée soit unique, mais j'aimerais bien désactiver cela, si c'est possible.

Merci !!
Eric

Peut-être, mais il y a 2 changements d'octets. Il y a peut-être le numéro de version, mais l'autre?
En tout cas, si c'est un numéro de version, il est généré automatiquement car il n'a rien à voir avec le numéro de version que j'ai mis dans les ressources.

C'est très possible, codées d'une certaine façon. Je voudrais bien court-circuiter ça pour avoir 2 résultats identiques sur 2 générations différentes, mais j'ai beau fouiller dans les options de compilation/link, rien à faire...
Expert Programmation

Citation :
c'est moi qui l'ai écrit
Ben pas forcément. :/  Les environnements de dév. comme Visual Studio ajoutent pas mal de lignes que l'auteur du code ne maîtrise pas forcément. Il faut que tu vérifies tous les fichiers, autant les tiens que ceux ajoutés par VS.

Tente ceci :
  • Copie TOUS les fichiers de ton dossier de dév. dans un dossier temporaire,
  • Compile ta DLL,
  • Compare TOUS les fichiers de ton dossier de dév. avec ceux de ton dossier temporaire.

    Enjoy!

    Tout d'abord, je précise que je maitrise TOUT le code. Ce n'est pas une DLL qui utilise les MFC ou autre, c'est une DLL pour Flight Simulator, petite et où aucun code n'est généré automatiquement par MSVC.

    Ceci dit, tu as eu une bonne idée. J'ai fait 2 génération de la même DLL, puis j'ai comparé les 2 répertoire "Release" qui en résultent. Dans tous les .obj générés, il y a quelques différences, ainsi que dans le fichier .lib généré. Intéressant, mais ça ne m'aide pas plus...

    Eric
    Expert Programmation

    Citation :
    Tout d'abord, je précise que je maitrise TOUT le code. Ce n'est pas une DLL qui utilise les MFC ou autre
    C'est effectivement un point qu'il fallait préciser ;) 
    Il y a des différences dans TOUS les .obj !!!!! :??: 

    Je constate que tu lies ton projet à uuid.lib. Pourquoi ?

    Pourquoi? Tout simplement car c'était là, dans les options par défaut dans les "default libs", et que je n'y ai pas touché. J'ai ré-essayé de l'enlever en mettant uuid.lib dans "Ignore Specific Library", mais ça ne change rien...

    En fait, je me trompe peut-être, car il est possible que la lib uuid.lib ne soit pas réellement ignorée. Je ne sais pas comment enlever toutes ces libs de la ligne de commande. Même en positionnant l'option "Ignore Default Libraries", elles y sont toujours...

    Eric

    Moi je lui demande rien, il fait ce qu'il veut le compilo ;-)
    Plus sérieusement, j'ai laissé les options par défaut, donc j'ai les options "Eliminate Unreferenced Data (/OPT:REF)" et "Remove Redundant COMDATs (/OPT:ICF)". Je ne sais même pas ce que ça veut dire, là ça va trop loin pour moi...

    Eric
    Lassé par la pub ? Créez un compte