2011-01-03 8 views
8

Ho un'applicazione di terze parti con sorgente, che è attualmente impostata per essere costruita contro libeay32MD.lib. Ma questa è un'applicazione, non una libreria. Non dovrebbe essere costruito contro libeay32MT.lib allora? Qual è la differenza tra due?Qual è la differenza tra il collegamento di nuovo libeay32MD.lib e libeay32MT.lib?

Ci sono le seguenti varianti di librerie:

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

e quelli "statici" con lo stesso nome Puoi spiegare la differenza tra tutti loro?

risposta

8
  • MD per dinamica release
  • MDd per dinamico-debug
  • MT statica release
  • MTd statica-debug

Source article via archive.org [^ 1] .

[^ 1]: Original Link

+0

Grazie mille. Capisco correttamente, quella dinamica significa che target exe richiederà DLL OpenSSL e mezzi statici che tutto il codice OpenSSL è fuso nell'eseguibile di destinazione e nessun DDL esterno richiesto? –

+1

Sì, è corretto. Non sono un esperto in questo, ma fondamentalmente significa che le DLL devono essere nella stessa directory del file .exe, o devono essere nel tuo percorso. Ci sono modi più elaborati per registrare DLL e simili, ma l'inferno della DLL mi fa impazzire e finisco per attaccarli nella directory .exe. – metasim

+0

Il collegamento è rotto. Questo è dall'archivio web: http://web.archive.org/web/20110415080451/http://www.curlpp.org/index.php/faq/50-how-to-build-openssl-on-win32- la piattaforma per l'uso-con-libcurl – loentar

0

Indovinando dai nomi, una libreria è per il multithread e l'altra per il multithread con i simboli di debug.

+0

Non sono sicuro perché ci sono anche libeay32MTd.lib e libeay32MDd.lib. Domanda aggiornata –

7

Queste variazioni determinano quale libreria C++ viene utilizzato, e che tipo di codice viene generato, anche se solo 'M' è disponibile significato multi-thread, non esistono opzioni thread singolo più.

  • MTd = Multi debug del codice threaded, e sul collegamento di libreria C++ di debug statica
  • MDd = Multi debug del codice threaded, e sul collegamento di C++ dinamico (DLL) libreria di debug
  • MT = multi threaded, il collegamento a C++ libreria statica
  • MD = multi threaded, il collegamento a C++ dinamico (DLL) biblioteca

appena modificato - mi dispiace, i codici erano in ordine sbagliato.

Edit 2: Più info ...

Queste bandiere sono opzioni e nulla a che fare con la necessità ssleay32.dll e libeay32.dll C++. Esistono 8 versioni di libeay32 - 4 per una build statica (nessuna dipendenza da ssl/libeay32.dll) e 4 per la build dinamica (richiede ssl/libeay32.dll). Ciascuno dei 4 sono divisi nel tipo di libreria C++ richiesto ...

C++ è disponibile per collegare in modo statico o dinamico per l'applicazione e per ognuno di questi tipi si possono utilizzare le librerie di debug o rilasciare le librerie.

/MT e/MTd (statico) non richiedono il codice ridistribuibile C++ poiché tutte le chiamate C/C++ sono contenute nel programma compilato.Se ogni modulo (non solo ssleay & co.) Si collega a queste opzioni, la tua app sarà completamente indipendente in termini di dipendenze C++.

/MD e/MDd (dinamico) richiedono le DLL ridistribuibili C++ installate sul computer di destinazione. Per/MD le versioni vengono scaricate facilmente da MSFT, ma è anche necessario notare quale versione di Visual C++ è stata utilizzata, ad es. VC++ 2008, VC++ 2010 ecc. Ci sono molte versioni della ridistribuibile che potrebbero essere necessarie. Per/MDd, le librerie si troveranno sul tuo computer di sviluppo, ma per MSFT non esiste una versione generale, ma puoi creare il tuo programma di installazione, se necessario, utilizzando Visual Studio; in genere/MDD viene utilizzato solo dallo sviluppatore per il test.

Le versioni di SSLEAY ecc nella domanda originale non indicano quale versione 2005/2008/2010 di Visual C++ è stata utilizzata per compilare le versioni MD, ma una volta compilata, può essere annotata dal target creato utilizzando una dipendenza visualizzatore (ad esempio depends.exe). Per esempio. se la tua app dipende da MSVCR90.DLL, allora significa VC++ 9 (in modo confuso, questa è la ridistribuibile 2008).

Tutti gli sviluppatori hanno bisogno la possibilità di scegliere il collegamento statico o libreria DLL, qui ci sono alcune note su ogni:

collegamento statico:

  • autonomo, facile da installare, il codice più grande impronta, la duplicazione di codice durante la creazione di più dll e exe.

collegamento dinamico:

  • più piccola orma, correzioni di bug da aggiornamenti MSFT, codice condiviso, un po 'più difficile da installare

Quando si dispone di codice in una libreria che restituisce un C/Oggetto C++ (ad es. Memoria allocata, std :: string, ecc.) È obbligatorio per collegare il codice con gli stessi flag utilizzati per compilare la libreria, senza eccezioni.

Problemi correlati