À quelles bibliothèques dois-je lier mon application en mode mixte ?
-
08-06-2019 - |
Question
J'intègre le support .NET dans notre application C++.
Il s'agit d'une application MFC à l'ancienne, avec 1 fichier supplémentaire compilé avec l'option "/clr" qui fait référence à un CWinFormsControl.
Je ne suis pas autorisé à supprimer l'indicateur de l'éditeur de liens "/NODEFAULTLIB".
(Nous avons notre propre système de gestion de build, pas celui de Visual Studio.)
Cela signifie que je dois spécifier toutes les bibliothèques nécessaires :Exécution VC et MFC.
Les autres options du compilateur incluent "/MD"
À côté de cela:Je ne peux pas utiliser l'indicateur de l'éditeur de liens "/FORCE:MULTIPLE" et simplement ajouter tout:
Je recherche un ensemble de bibliothèques qui ne se chevauchent pas.
La solution 3
Comment je l'ai résolu :
- lien avec "/FORCE:MULTIPLE /verbose" (qui lie ok) et mettez la sortie de côté.
- liez avec "/NODEFAULTIB /verbose" et tracez tous les problèmes non résolus dans la sortie de l'étape précédente et ajoutez les bibliothèques 1 par 1.
- Cela a abouti à des doubles :"AAA.lib :XXX déjà défini dans BBB.lib"
- Et puis j'ai finalement compris :Unités gérées ET non gérées recompilées avec /MD et lien vers (entre autres) :mscoree.lib msvcmrt.lib mfcm80d.lib
Mélanger /MT (non géré) et /MD (géré) s'est avéré être une mauvaise idée :différentes bibliothèques (qui se chevauchent) sont nécessaires.
@ajryan :Dependcy Walker me dit uniquement quelles DLL sont utilisées, pas à quelles bibliothèques sont liées lors de la liaison.(par exemple.msvcmrt.lib ?) Je pense.
Merci pour les réponses!
Jan
Autres conseils
Au strict minimum :
mscoree.lib MSVCRT.lib mfc90.lib (ajustez la version en conséquence)
Et itérez à partir de là.
Utilisez AppWizard pour créer une application MFC simple dans votre style (SDI / MDI / dialog), puis mets tes dépendances.