Italiano English |
Array> Software developing> Visual Studio Navigators Sections In evidence
Most required Last ModifyHowto create a DLL without debug information in VisualC++ Last update: 18/11/2009 -
Viewed: 1347 dal 18 Nov 2009 -
Vote:0.0 (0 Votes)
Translation for this document is not available or is not complete, if you are intrested to receive information please write to If you create a DLL that using runtime library then DLL's client application must load required runtime library. If runtime libs loaded by client application aren't same than required by your DLL you will have "unable to run your application. MSVCR80 was not found...."
Un caso tipico in cui si verifica il problema è nel collegamento di una DLL che non contiene informazioni di debug, con una applicazione che al contrario le contiene, quando la DLL è stata compilata con l'opzione Ad esempio, abbiamo fornito una DLL ad un cliente il quale deve realizzare una applicazione che utilizza la nostra libreria, fornita appunto come DLL. Naturalmente la nostra libreria è in versione Release quindi ottimizzata e senza le informazioni di debug. Al contrario il cliente deve sviluppare la nuova applicazione, quindi utilizza il Debug per controllare il proprio software. Bene, nella circostanza appena descritta, se la DLL è stata compilata con le librerie di runtime dinamiche (/MD) , si richiede che il codice effettivo contenuto in MSVCR80.DLL, deve essere disponibile in fase di esecuzione. Tuttavia l'applicazione del nostro cliente, carica la runtime MSVCR80.DLL solo nella versione Release della sua applicazione, mentre le applicazioni compilate con le informazioni di debug caricano la versione debug delle runtime , ovvero MSVCR80D.DLL Ecco perchè, se si lancia l'applicazione in versione Release tutto funziona regolarmente, se si lancia l'applicazione in versione Debug compare l'errore di cui sopra. La soluzioneCi sono due soluzioni Soluzione 1Creare due versioni della libreria una in versione Release ed una in versione Debug. Il nostro cliente utilizzerà la versione appropriata. Questa soluzione potrebbe non piacere perche' richiede la distribuzione di una versione della DLL che è piu' esposta al reverse engineering, ma è la soluzione più ottimizzata. Per ottenere due DLL differenti è sufficiente impostare un nome diverso come "file di output" nelle due Soluzioni Visual Studio relative alla DLL Soluzione 2Creare una DLL con librerie di runtime statiche, ovvero includere nella DLL la libreria di runtime. In questo caso la DLL ingrassa, è autonoma e può essere utilizzata sia da applicazioni in versione Debug che in versione Release.
Per creare una DLL con librerie statiche è necessario attivare l'opzione
ConclusioniHo perso qualche ora del mio tempo a cercare la causa del problema, Utilizzando "Dependency Walker" ho potuto analizzare analiticamente tutte le dipendenze della applicazione e della DLL, così ho risolto l'arcano. I miei complimenti all'autore. Ulteriori informazioni:
Vote this page
|
|
Nota: questo materiale è di proprietà di Pk Lab ed è utilizzabile liberamente a condizione di citarne la fonte
[Home Page] [Search]Copyright PkLab (c) 2009 Contatto: |
Comments
0 comments (Send your comment)