eliminando il problema di incompatibilità tra compilatore con librerie dinamiche C ++
-
12-09-2019 - |
Domanda
..., un follow-up a questo .
Dalle risposte che ho dato alla mia domanda fa riferimento ho imparato che:
- diversi compilatori usano decorazione nome diverso, il che rende impossibile l'utilizzo di una libreria dinamica C ++ costruito con compilatore A in un progetto costruito con il compilatore B,
- la libreria può essere costruito come statico avermi salvato tra cui n intestazione e il file di origine nel progetto o simboli esportatori. (Ancora non salverà la ricostruzione della biblioteca per l'uso con un compilatore diverso.)
Avere uno sguardo più da vicino SDL alla luce di ciò che è stato detto, ho capito, che il suo collega ha due strati: nel mio progetto SDL, collego staticamente contro libSDL.a, che, a sua volta, di collegamento dinamico contro SDL.dll, elminating così la necessità per le diverse versioni dLL per diversi compilatori.
La domanda è se questo è davvero il caso e una soluzione praticabile al problema, o mi sto perdendo qualcosa (e cosa)?
Soluzione
Credo che il tuo approccio è giusto. Avevo messo in questo modo:
- Per una dll sia usabile da compilatori diversi, deve contenere solo funzioni C (possono essere compilati utilizzando un compilatore C ++ utilizzando
extern C
) - Come al solito con DLL, una libreria di importazione statico può essere utilizzato in modo che funzioni nella DLL può essere chiamato direttamente, piuttosto che dover essere caricato per nome
- Al posto di una biblioteca normale di importazione, si potrebbe avere una libreria wrapper che avvolge le funzioni del DLL C in C ++ classi e funzioni
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow