Pourquoi la bibliothèque MSCVRT générer des conflits au moment de lien? [dupliquer]
-
23-09-2019 - |
Question
Cette question a déjà une réponse ici:
Je construis un projet dans Visual C ++ 2008, qui est un exemple application MFC pour une bibliothèque de classes C ++ statique que je vais utiliser dans mon projet bientôt. Alors que la construction de la configuration de débogage, j'obtiens ce qui suit:
LNK4098 d'avertissement: defaultlib des conflits 'MSVCRT' avec l'utilisation d'autres libs; utilisation / NODEFAULTLIB: bibliothèque
Après avoir utilisé l'option recommandée (en ajoutant « msvcrt » au champ « Ignorer la bibliothèque spécifique » dans les paramètres de l'éditeur de liens de projet pour la configuration de débogage), les liens du programme et fonctionne très bien. Cependant, je voudrais savoir pourquoi ce conflit survenu, pourquoi dois-je ignorer une bibliothèque critique, et si je dois attendre à des problèmes plus tard, je si ajouter l'ignorer, ou ce qui se passe si je ne le fais pas (parce que le programme construit de toute façon).
En même temps, la configuration de sortie met en garde contre:
LNK4075 d'avertissement: ignorant '/ EDITANDCONTINUE' en raison de '/ OPT: ICF' spécification
avertissement LNK4098: defaultlib des conflits « MSVCRTD » avec l'utilisation d'autres libs; utilisation / NODEFAULTLIB: bibliothèque
Je devine que le suffixe « D » signifie que c'est la version de débogage de VC ++ runtime, aucune idée pourquoi ceci se sert cette fois-ci. Quoi qu'il en soit, en ajoutant « msvcrtd » à l'ignorer champ provoque beaucoup d'erreurs de liaison de la forme:
erreur LNK2001: symbole externe non résolu __imp ___ CrtDbgReportW
Toute idée très appréciée.
La solution
Cela se produit généralement lorsque vous établissez un lien avec une bibliothèque statique qui utilise une autre version d'exécution du VC (réglage de C++ ->Code Generation->Runtime Library
dans les propriétés du projet).
Autres conseils
Ce général est arrivé à moi quand j'étais (par inadvertance) mélange des saveurs différentes de la RTL, comme (comme il semble être dans votre cas) et de débogage Release ou MT et ST.