J'utilise MSVC++ 6 pour créer un très gros projet. Certains des fichiers source de ce projet sont partagés avec un petit utilitaire que nous utilisons pour gérer l'application. Auparavant, ce petit utilitaire nécessitait une liaison avec de nombreuses bibliothèques de l'application principale et nécessitait également les DLL de l'application principale lors de l'exécution. J'ai été chargé de supprimer ces dépendances, ce qui semblait assez simple ... malheureusement, les en-têtes précompilés utilisés dans l'application principale me causent beaucoup de problèmes. J'ai d'abord retravaillé tous les fichiers de l'utilitaire pour inclure explicitement tout ce dont ils avaient besoin, puis j'ai supprimé les directives #include pour PCH (cela a supprimé 95% des dépendances inutiles pour l'utilitaire). Cela fonctionne très bien pour compiler l'utilitaire. Maintenant, cependant, la compilation de l'application principale me donne des erreurs sur les directives d'en-tête précompilées manquantes. J'ai pensé "super, je vais juste inclure le PCH sous condition". Cela ne semble pas fonctionner ... J'ai "inattendu #endif", comme mentionné here. Ma prochaine pensée a été de désactiver PCH dans l'application principale pour les trois fichiers source qui sont partagés entre l'utilitaire et l'application principale. Cela compile avec succès, mais je reçois un tas d'erreurs qui ressemblent à ceci pendant la liaison:La restructuration des dépendances de certains fichiers dans un projet utilisant des en-têtes précompilés provoque des erreurs de liens
tls7d.lib(tls707d.dll) : error LNK2005: "public: unsigned int __thiscall RWCString::length(void)const " ([email protected]@@QBEIXZ) already defined in stripledescypher.obj
AFAICT, tous les symboles définis se multiplient sont ceux que j'inclure explicitement dans les fichiers partagés pour éviter la nécessité de PCH . Mon intuition est que puisque je relie ces 3 fichiers dans la même DLL que le fichier PCH .cpp, ils sont compilés à plusieurs endroits. Y at-il un moyen de sortir de ce gâchis? Je vais essayer à peu près n'importe quoi ...