Question

J'utilise VS2008 pour développer une dll com qui utilise par défaut CRT version 9 mais j'utilise TSF (Framework de service de texte) 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 ?

Était-ce utile?

La solution

Je me joins de tout cœur à la recommandation pas pour modifier manuellement la version CRT avec laquelle vous créez un lien.Si toutefois, pour une raison quelconque (que je ne peux pas imaginer), c'est la bonne solution pour vous, la façon de le faire est de changer le manifeste pour votre projet.

Assurez-vous d'abord qu'un manifeste est pas généré à chaque build (sur VS2005 :Propriétés de configuration/Linker/Fichier manifeste/Générer le manifeste), car cela écraserait vos modifications manuelles.Assurez-vous également que l'isolation est activée.Ensuite, localisez le fichier manifeste – il doit se trouver dans $(IntDir) (par exemple, Debug).Vous devriez voir une section similaire à -

  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC80.DebugCRT' version='8.0.50727.762' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>

(Pour les versions de débogage, bien sûr).Vous devez modifier les attributs version et publicKeyToken de l'élément CRT.Vous pouvez inspecter les fichiers dans votre dossier WINDOWS\WinSxS local pour voir les versions disponibles.Vérifier ici comment extraire le publicKeyToken une fois que vous avez trouvé la version souhaitée.(Bien que j'essaierais d'abord d'examiner directement les manifestes d'autres projets, en établissant un lien avec la version CRT souhaitée).

Si vous y allez, attendez-vous à de l'eau agitée.Vous aurez peut-être de la chance si votre application est une application console qui n'est pas liée à d'autres composants côte à côte (MFC, OpenMP, etc.).Si votre application n'est pas triviale, je serais surpris s'il n'y a pas de dépendances de version complexes entre les composants SxS.

(modifier) ​​Vous devrez également distribuer avec votre application le CRT spécifique que vous utilisez.Voici quelqu'un qui a fait ça.

Autres conseils

La meilleure façon sera de construire votre DLL avec la version d'un 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 utilisez également la même version des fichiers d'en-tête. Et la meilleure façon de le faire est d'utiliser la version la droite VC ++ ...

Si vous voulez toujours essayer, vous pouvez:

  • allez à "Configuration Paramètres-> Linker-> Input-> Ignorer la bibliothèque spécifique" et entrez le crt que vous utilisez (libc.lib, libcmt.lib, etc. voir cette projet de code article pour plus de détails).
  • Entrez le nom de la version crt que vous voulez utiliser dans « Configuration> Paramètres Linker-> Input-> dépendances supplémentaires », et son chemin dans « Paramètres de configuration> Linker-> Général-> répertoires de bibliothèques supplémentaires ».

Vous pouvez aussi changer les répertoires par défaut dans « Outils> Options> Projets et Solution-> VC ++ directories-> fichiers de bibliothèque ». peut-être changer $ (VCInstallDir) lib au chemin où vous autre version du CRT réside fera l'affaire

Ne pas essayer d'utiliser VS9 et un lien vers une autre version du CRT.

Si vous avez besoin de votre application pour créer un lien vers un autre moniteur CRT, CRT de dire VS8, alors 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 64 bits compilé, debug (j'ai intégré que LV2013 x64), mais il devrait fonctionner pour toute autre version VS:

1) Faites un clic droit sur votre solution> Propriétés> débogage des fichiers source ...

2) Il y a peut-être deux entires (selon votre répertoire VS-install-) ... C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ Common7 \ IDE \ vc7 \ atlmfc C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ Common7 \ IDE \ vc7 \ crt

Avec eux, il travaillerait pour Visual Studio 2013 Express, mais devrait également fonctionner pour d'autres 2013. Si vous avez Visual Studio 10 ou 11 tapez simplement « Microsoft Visual Studio 11.0 » ou 10.0 dans chacun. Vous pouvez aussi les ajouter.

Ces entrées vous pouvez obtenir de votre OpenCV.sln sous Solution> Propriétés> débogage des fichiers source (comme décrit ci-dessus). Et comme déjà decribed. CRT doit correspondre ... et cela se produit en ce lieu

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top