Nous avons une application C++ que j'ai récemment portée de Linux/gcc pour construire sous Windows avec Visual Studio 2005. L'application utilise une bibliothèque tierce qui fournit uniquement des DLL utilisant la DLL CRT optimisée (c'est-à-dire qu'ils ne fournissent pas d'équivalents qui se lient à la DLL CRT de débogage). Avec VS2005 cela ne semble pas être un problème = la construction de débogage a trouvé la DLL CRT optimisée dans le répertoire System32.Déboguer l'application Build en localisant les assemblages de CRT
Je suis maintenant en train d'essayer de créer et d'exécuter notre application avec VS2008 et la construction de débogage ne peut pas s'exécuter car elle ne trouve pas la DLL CRT optimisée (msvc690.dll). Les DLL VC9 CRT sont stockées dans des répertoires avec un nom de style GUID - je crois que c'est un assemblage côte à côte et l'application est censée le localiser en utilisant le manifeste de l'application. Cependant, le manifeste qui se construit et intégré dans l'application exe spécifie que l'ensemble CRT de débogage:
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level='asInvoker' uiAccess='false' />
</requestedPrivileges>
</security>
</trustInfo>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.VC90.DebugCRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
</dependentAssembly>
</dependency>
</assembly>
Je ne suis pas un expert de Windows (pas plus au moins) si cela est nouveau pour moi. Quelle est la bonne solution ici? Dois-je indiquer au compilateur de manifeste d'ajouter la DLL CRT optimisée à l'assembly? Si oui, comment puis-je faire cela?
Doh, je voulais dire msvcr90.dll. La DLL tierce ne contient pas son propre manifeste. Si je l'ouvre dans Dep Walker il a une dépendance sur msvcr80.dll. Après une enquête plus approfondie, je pense que cette troisième partie lib est un hareng rouge. Il semble que l'une de nos bibliothèques lie à la fois aux débogueurs et aux DLL CRT optimisées. Il se trouve que c'est la lib qui a la dépendance sur la librairie de tierce partie, ce qui peut encore être la cause, mais je vais devoir scruter les paramètres du projet pour être certain. Merci pour l'aide de toute façon, je suis peut-être de retour avec plus de questions. –
Je devais exclure MSVCRT.lib dans les paramètres du projet pour la configuration de débogage, puis tout semblait fonctionner.Je vais marquer cette réponse comme correcte, car elle semble répondre correctement à ma question initiale. –
À moins que les «dlls» tiers ne soient réellement des bibliothèques statiques, je dois admettre que la solution n'a pas beaucoup de sens. Si ce sont des DLL, ils devraient être plutôt insistant sur la DLL d'exécution qu'ils veulent. Changer les paramètres de l'éditeur de liens de vos applications ne devrait pas changer cela, car les DLL de tierce partie sont déjà liées. –