Mit welchen Bibliotheken muss ich meine Mixed-Mode-Anwendung verknüpfen?
-
08-06-2019 - |
Frage
Ich integriere die .NET-Unterstützung in unsere C++-Anwendung.
Es handelt sich um eine MFC-Anwendung der alten Schule mit einer zusätzlichen Datei, die mit der Option „/clr“ kompiliert wurde und auf ein CWinFormsControl verweist.
Ich darf das Linker-Flag „/NODEFAULTLIB“ nicht entfernen.
(Wir haben unser eigenes Build-Management-System, nicht das von Visual Studio.)
Das bedeutet, dass ich alle notwendigen Bibliotheken angeben muss:VC-Laufzeit und MFC.
Zu den weiteren Compileroptionen gehört „/MD“.
Daneben:Ich kann das Linker-Flag „/FORCE:MULTIPLE“ nicht verwenden und einfach hinzufügen alles:
Ich suche nach einem nicht überlappenden Satz von Bibliotheken.
Lösung 3
So habe ich es gelöst:
- Link mit „/FORCE:MULTIPLE /verbose“ (das ist ok) und die Ausgabe beiseite legen.
- Verknüpfen Sie mit „/NODEFAULTIB /verbose“ und verfolgen Sie alle ungelösten Probleme in der Ausgabe des vorherigen Schritts und fügen Sie die Bibliotheken 1 nach 1 hinzu.
- Daraus ergaben sich Doppelgänger:„AAA.lib:„XXX bereits in BBB.lib definiert“
- Dann habe ich es endlich verstanden:Neukompilierte verwaltete und nicht verwaltete Einheiten mit /MD und unter anderem (unter anderem):MSCOREE.LIB MSVCMRT.LIB MFCM80D.LIB
Das Mischen von /MT (nicht verwaltet) und /MD (verwaltet) erwies sich als schlechte Idee:Es werden verschiedene (überlappende) Bibliotheken benötigt.
@ajryan:Dependcy Walker sagt mir nur, welche DLLs verwendet werden, nicht, mit welchen Bibliotheken beim Verknüpfen verknüpft wird.(z.B.msvcmrt.lib?) Ich denke.
Danke für die Antworten!
Jan
Andere Tipps
Als absolutes Minimum:
MSCOREE.LIB MSVCRT.LIB MFC90.LIB (Version angemessen anpassen)
Und iterieren Sie von dort aus.
Verwenden Sie den AppWizard, um eine einfache MFC-App in Ihrem Stil (SDI/MDI/Dialog) zu erstellen und dann Zieh deine Abhängigkeiten an.