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)?

È stato utile?

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
scroll top