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.

War es hilfreich?

Lösung 3

So habe ich es gelöst:

  1. Link mit „/FORCE:MULTIPLE /verbose“ (das ist ok) und die Ausgabe beiseite legen.
  2. 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.
  3. Daraus ergaben sich Doppelgänger:„AAA.lib:„XXX bereits in BBB.lib definiert“
  4. 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top