2013-02-18 5 views
3

Ma solution VC++ MFC comprend quatre projets.DLL multithread (/ MD) vs multi-thread (/ MT)

  1. Deux build de projet DLL
  2. Un projet construit comme statique Lib
  3. Un projet construit comme exe avec l'utilisation de plus de trois bibliothèques.

J'ai besoin d'héberger cette application sans support CLR dans Windows XP. donc j'utilise la configuration Use of MFC comme Use MFC in a Static Library dans les quatre projets.

Donc, ma question est quelle devrait être la configuration C++-> Code Genaration pour chaque projet.

+0

Dois-je compiler avec/MD ou/MT? : http://stackoverflow.com/questions/757418/should-i-compile-with-md-or-mt – Pheonix

+0

@Pheonix: merci et j'ai lu ceci. Logiquement DLL devrait utiliser/MD et Lib et Exe devraient utiliser/MT. Mais mon application obtient une erreur de liaison. 'Erreur LNK2005: __encode_pointer déjà défini dans MSVCRT.lib (MSVCR90.dll)'. Je pense que parce que statique lib inclure déjà avec un MSVCRT.lib. Donc, ce sont les conflits de quitter. J'ai donc besoin d'une réponse directe si quelqu'un comprend clairement ce concept. Je pense qu'il devrait y avoir une règle simple pour cette question. –

Répondre

1

Utilisez/MD pour tous vos projets. Comme indiqué dans les questions référencées: il est important d'être cohérent. Donc: même construire votre Static Lib en utilisant/MD, car il sera utilisé dans un exécutable/MD. Lorsque vous faites cela, l'éditeur de liens n'essaie pas de lier deux versions différentes de la bibliothèque Microsoft (statique et dynamique) qui résout l'erreur.

+0

Cette solution ne fonctionne pas pour moi. Donc, je viens de réduire mon application pour un exe et un Dll à des fins de test. les deux construisent comme Use 'MFC dans une bibliothèque statique' et' Multi-threaded DLL (/ MD) ', mais ne fonctionnent pas dans Windows XP. mais en cours d'exécution dans Windows 7 Visual Studio installé ordinateur. –