Comment forcer le compilateur C++ à utiliser une version CRT spécifique?
j'utilise VS2008 pour développer un COM dll qui par défaut utilise CRT version 9 mais J'utilise TSF (Text service framework) qui n'est pas compatible avec le nouveau CRT. Je pense que la solution est d'utiliser la version compatible alors comment puis-je spécifier la version CRT?
4 réponses
je me joins entièrement de tout cœur à la recommandation pas pour changer manuellement la version CRT contre laquelle vous faites le lien. Si toutefois, pour une raison quelconque (que je ne peux pas imaginer) c'est la bonne ligne de conduite pour vous, la façon de le faire est de changer le manifeste pour votre projet.
assurez-vous D'abord qu'un manifeste est et non généré sur chaque build (sur VS2005: propriétés de Configuration / Linker/Manifest file / Generate manifeste), car il écraserait vos modifications manuelles. Assurez-vous également que l'isolation est activée. Ensuite, localisez le fichier manifest - devrait être à la valeur $(IntDir) (par exemple, Debug). Vous devriez voir une section semblable à
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.VC80.DebugCRT' version='8.0.50727.762' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
</dependentAssembly>
</dependency>
(pour debug builds, bien sûr). Vous devez éditer les attributs version et publicKeyToken de l'élément CRT. Vous pouvez inspecter les fichiers de votre dossier local WINDOWS\WinSxS pour voir les versions disponibles. Vérifier ici comment extraire le publikeytoken une fois que vous trouvez la version que vous voulez. (Bien que j'ai d'abord essayé de regarder directement dans les manifestes d'autres projets, lien contre votre version CRT désirée).
Si vous allez là, attendez-vous à de l'eau brute. Vous pouvez avoir un peu de chance si votre application est une application console qui ne se lie pas avec d'autres composants côte à côte (MFC, OpenMP, etc.). Si votre application est non-triviale, je serais surpris s'il n'y a pas une version complexe les dépendances entre les composants SxS.
(edit) vous devez également distribuer avec votre application le CRT spécifique que vous utilisez. Voici quelqu'un qui a fait ça.
la meilleure façon sera de construire votre DLL avec une version VC++ qui utilise le CRT qui est compatible avec TFS.
Je ne pense pas que ce soit une bonne idée juste de lier votre DLL avec une version différente du CRT, à moins que vous n'utilisiez également la même version des fichiers d'en-tête. Et la façon la plus simple de le faire sera d'utiliser la bonne version VC++...
Si vous voulez essayer, vous pouvez:
- "Les paramètres de Configuration->Linker->Entrée->Ignorer spécifiques de la bibliothèque" et entrez le crt vous utilisez (libc.lib, libcmt.lib, etc. voir cet article pour plus de détails).
- entrez le nom de la version crt que vous voulez utiliser dans" Paramètres de Configuration->Linker->entrée->dépendances supplémentaires", et son chemin dans"Paramètres de Configuration->Linker->général->répertoires supplémentaires de la bibliothèque".
vous pouvez également essayer de modifier les répertoires par défaut dans "Outils->Options->projets et solutions->répertoires VC++->fichiers de bibliothèque". Peut-être que changer $(VCInstallDir)lib sur le chemin où se trouve votre autre version du CRT fera l'affaire
N'essayez pas D'utiliser VS9 et de créer un lien vers une autre version du CRT.
si vous avez besoin de votre application pour créer un lien vers un autre CRT, par exemple le CRT de VS8, vous devez compiler et lier votre application dans cette version de VS.
la solution a fonctionné pour moi avec Visual Studio Express 2013 x64 + OpenCV 2.4.9 x64 compilé, debug( j'ai intégré cela dans LV2013 x64), mais il devrait fonctionner pour toute autre VS-version:
1) Faites un clic droit sur votre Solution > propriétés > déboguez les fichiers Source ...
2) Il y a peut-être deux entires (selon votre répertoire VS-install -)... C:\Program fichiers (x86)\Microsoft Visual Studio 12.0\Common7\IDE\vc7\atlmfc C:\Program Dossiers (x86) \ Microsoft Visual Studio 12.0\Common7\IDE\vc7\crt
avec ceux-ci, il fonctionnerait pour Visual Studio 2013 Express, mais devrait également fonctionner pour d'autres 2013. Si vous avez Visual Studio 10 ou 11 Il suffit de taper "Microsoft Visual Studio 11.0" ou 10.0 dans chaque. Vous pouvez aussi les ajouter.
ces entrées vous pouvez obtenir à partir de votre OpenCV.sln sous Solution > Properties > Debug Source Files (comme décrit ci-dessus). Et comme déjà décrit: CRT doit correspondre... et ce qui se passe dans cet endroit.