Was ist der Unterschied zwischen dem Linking von Libeay32MD.lib und Libeay32MT.lib?

8

Ich habe eine Anwendung von Drittanbietern mit der Quelle, die derzeit gegen libeay32MD.lib erstellt wird. Aber das ist eine Anwendung, keine Bibliothek. Sollte es nicht gegen libeay32MT.lib gebaut werden? Was ist der Unterschied zwischen zwei?

Es gibt folgende Varianten von Bibliotheken:

  • libeay32MD.lib
  • libeay32MDd.lib
  • libeay32MT.lib
  • libeay32MTd.lib

und "statische" mit dem gleichen Namen. Können Sie den Unterschied zwischen allen erklären?

    
Vladislav Rastrusny 03.01.2011, 19:18
quelle

3 Antworten

8
  • MD für dynamische Freigabe
  • MDd für dynamic-debug
  • MT für statische Freigabe
  • MTd für statisches-debuggen

Quellenartikel über archive.org [^ 1].

[^ 1]: Original Link

    
metasim 28.03.2011, 20:15
quelle
7

Diese Variationen bestimmen, welche C ++ - Bibliothek verwendet wird und welche Art von Code generiert wird, obwohl nur 'M' verfügbar ist, was Multi-Threading bedeutet, es gibt keine Singlethread-Optionen mehr.

  • MTd = Debugging-Code mit mehreren Threads und Verknüpfung mit statischer C ++ - Debugbibliothek
  • MDd = Debugging-Code mit mehreren Threads und Verknüpfung mit C ++ dynamischer DLL-Debug-Bibliothek
  • MT = Multi-threaded, Verknüpfung mit C ++ static library
  • MD = Multi-threaded, Verknüpfung zu C ++ - dynamischer Bibliothek (DLL)

Just editiert - Entschuldigung, die Codes waren in der falschen Reihenfolge.

Bearbeiten 2: Weitere Informationen ...

Diese Flags sind C ++ - Optionen und haben nichts mit der Anforderung von ssleay32.dll und libeay32.dll zu tun. Es gibt 8 Versionen von libeay32 - 4 für einen statischen Build (keine Abhängigkeit von ssl / libeay32.dll) und 4 für dynamischen Build (erfordert ssl / libeay32.dll). Jeder der 4 ist in den Typ der C ++ - Bibliothek erforderlich ...

unterteilt

C ++ ist verfügbar, um statisch oder dynamisch mit Ihrer Anwendung zu verknüpfen, und für jeden dieser Typen können Sie Debug-Bibliotheken oder Release-Bibliotheken verwenden.

/ MT und / MTd (statisch) benötigen den verteilbaren C ++ - Code nicht, da alle C / C ++ - Aufrufe in Ihrem kompilierten Programm enthalten sind. Wenn jedes Modul (nicht nur ssleay & amp; co.), Auf das Sie verlinken, diese Optionen verwendet, ist Ihre App vollständig unabhängig von C ++ - Abhängigkeiten.

/ MD und / MDd (dynamisch) benötigen die verteilbaren C ++ - DLLs, die auf dem Zielcomputer installiert sind. Für / MD können die Versionen einfach von MSFT heruntergeladen werden, aber Sie müssen auch notieren, welche Version von Visual C ++ Sie verwendet haben - z. VC ++ 2008, VC ++ 2010 usw. Es gibt viele Versionen des Redistributable, die Sie möglicherweise benötigen. Für / MDd befinden sich die Bibliotheken auf Ihrem Entwicklungscomputer, es gibt jedoch keine allgemeine Version von MSFT. Sie können jedoch bei Bedarf ein eigenes Installationsprogramm mit Visual Studio erstellen. normalerweise / MDd wird nur vom Entwickler zum Testen verwendet.

Die Versionen von SSLEAY usw. in der ursprünglichen Frage geben nicht an, welche Version 2005/20010 von Visual C ++ zum Kompilieren der MD-Versionen verwendet wurde, aber wenn sie einmal kompiliert wurde, kann sie mithilfe eines Abhängigkeits-Viewers vom erstellten Ziel notiert werden (zB abhängig.exe). Z.B. Wenn Ihre App von MSVCR90.DLL abhängt, dann bedeutet das VC ++ 9 (verwirrend, das ist das 2008 verteilbare).

Alle Entwickler benötigen die Option, um eine statische oder DLL-Bibliotheksverknüpfung zu wählen. Hier sind einige Hinweise zu jedem:

Statische Verknüpfung:

  • eigenständig, einfach zu installieren, größerer Code-Footprint, Duplizierung von Code beim Erstellen mehrerer DLLs und EXEs.

Dynamische Verknüpfung:

  • kleinerer Footprint, Bugfixes von MSFT-Updates, gemeinsamer Code, etwas schwieriger zu installieren

Wenn Sie Code in einer Bibliothek haben, die ein C / C ++ - Objekt zurückgibt (z. B. allokierten Speicher, std :: string usw.), ist es obligatorisch , Ihren Code mit denselben Flags zu verknüpfen, die zum Kompilieren verwendet werden die Bibliothek, ohne Ausnahmen.

    
Rob 03.05.2012 18:54
quelle
0

Ausgehend von den Namen, ist eine Bibliothek für Multithread und die andere für Multithread mit Debugging-Symbolen.

    
wilhelmtell 27.03.2011 19:14
quelle

Tags und Links