Miscelazione di librerie statiche di codice C create da diverse versioni di Visual Studio 2002 e versioni successive

StackOverflow https://stackoverflow.com/questions/462768

Domanda

Ho una libreria statica collegabile di routine C e Fortran compilata e collegata insieme usando il compilatore Visual Studio 2002 C (v7.0) e il compilatore Intel Fortran 9.0.018.

Il codice C nella mia libreria chiama e si collega alle librerie statiche 2002 Microsoft C-RunTime (MSCRT) (a thread singolo). Credo che l'attuale numero di versione delle librerie CRT del 2002 sia v7.0

Mi riferirò a questa libreria statica come " vs2002if9.lib "

Posso collegare staticamente al mio " vs2002if9.lib " utilizzare in modo sicuro qualsiasi versione successiva di Visual Studio (2003, 2005 o 2008) senza alcuna preoccupazione su come si comporta il programma chiamante rispetto alle chiamate di runtime C?

O sto creando problemi mescolando la versione delle librerie statiche CRT?

Cosa succede se fornisco il mio " vs2002if9.lib " a sviluppatori di software di terze parti? Quali requisiti sto imponendo loro?

È stato utile?

Soluzione

Il mixaggio dei runtime C non ha funzionato per me in passato. L'unico modo in cui riesco a vederlo funzionare {forse} è se stai completamente isolando l'uso dello stack / heap entro i limiti del C-Runtime collegato staticamente [nulla attraversa i confini tramite parametri ma quindi quale valore è il tuo vs2009if9 .lib fornendo].

Ad esempio, se si deve allocare un puntatore [memoria heap] all'interno dell'applicazione e passare questo puntatore alla libreria fornita, quale gestore heap dovrebbe essere utilizzato? La risposta corretta è il gestore heap che gestisce il puntatore, ma la tua libreria non sarà a conoscenza dell'altro gestore heap. Diventa più brutto se la tua libreria alloca memoria per l'uso da parte dell'applicazione ed è responsabilità delle applicazioni liberare / eliminare usando il puntatore fornito (design errato sì ma ancora possibile). Ancora una volta, verrà utilizzato il gestore di heap sbagliato.

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