Domanda

È corretto collegare una libreria statica (.lib) compilata con VS 2005 con un programma compilato con VS 2008?Sia la libreria che il mio programma sono scritti in C++.Questo programma viene eseguito sull'emulatore di Windows Mobile 6 Professional.

Sembra funzionare, non ci sono errori di collegamento.Tuttavia il programma si blocca durante l'avvio perché accadono cose strane all'interno della libreria collegata.Per esempio.lib può restituire un vettore di caratteri con la dimensione di un grande numero negativo.

Non ci sono problemi di questo tipo quando il programma è compilato con VS 2005.

Ciò che è ancora più strano, il problema si verifica solo quando si utilizza la configurazione di rilascio per la build.Quando si compila utilizzando la configurazione di debug il problema non si verifica.

È stato utile?

Soluzione

VS2005 e VS2008 utilizzano implementazioni STL diverse.Quando il codice VS2005 restituisce un vettore, l'oggetto ha un layout di memoria diverso da quello previsto da VS2008.Questo dovrebbe essere il motivo dei valori interrotti visualizzati nella data restituita.

Come regola generale, dovresti sempre compilare tutti i moduli C++ di un progetto con lo stesso compilatore e tutte le impostazioni/#define uguali.

Una #define particolare che causa un comportamento simile è la #define SECURE_SCL di VS2008.Due moduli compilati con impostazioni diverse creeranno esattamente i tuoi problemi, perché #defining SECURE_SCL introduce più variabili membro in varie classi di libreria C++.

Altri suggerimenti

Non è errato collegarsi a una libreria precedente nel modo in cui descrivi, ma non mi sorprende che tu stia riscontrando un comportamento strano.Controlli di integrità della coppia:

  • Entrambi i file utilizzano l'estensione stesse versioni del stesse librerie di runtime?
  • L'applicazione .EXE "vede" gli stessi file di intestazione rispetto ai quali è stato creato .LIB?Assicurati che le macro _WIN32_WINNT (ecc.) lo siano dichiarato correttamente.

E quando dici .LIB, intendi una vera libreria statica (mylib.lib) o una libreria di importazione per una DLL (mylib.lib -> mylib.dll)?

E quali sono le impostazioni di compilazione/collegamento per il tuo progetto eseguibile VS2008?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top