éliminant ainsi le problème d'incompatibilité entre compilateur avec des bibliothèques dynamiques C +

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

Question

..., un suivi ce .

D'après les réponses que j'ai donné à ma question fait référence que j'ai appris que:

  • différents compilateurs utilisent différents décoration de nom, ce qui rend impossible d'utiliser une bibliothèque dynamique C ++ construit avec le compilateur A dans un projet construit avec le compilateur B,
  • la bibliothèque peut être construit comme statique me sauver, y compris en-tête de n et les fichiers source du projet ou des symboles exportateurs. (Il ne peut toujours pas enregistrer la reconstruction de la bibliothèque pour une utilisation avec un compilateur différent.)

Avoir un examen plus attentif SDL à la lumière de ce qui a été dit, je me suis rendu compte, que son enchaînement a deux couches: dans mon projet de SDL, je créer un lien statique contre libSDL.a, qui, à son tour, lien dynamique contre SDL.dll, elminating ainsi la nécessité pour les différentes versions de .dll pour différents compilateurs.

La question est de savoir si cela est vraiment le cas et une solution viable au problème, ou suis-je manque quelque chose (et quoi)?

Était-ce utile?

La solution

Je pense que votre approche est juste. Je mettrais cette façon:

  • Pour une dll pour être utilisable par différents compilateurs, il doit contenir des fonctions que C (ils peuvent être compilés en utilisant un compilateur C ++ en utilisant extern C)
  • Comme d'habitude avec dll, une bibliothèque d'importation statique peut être utilisé pour que les fonctions du dll peuvent être appelés directement, plutôt que de devoir être chargé par nom
  • Au lieu d'une bibliothèque d'importation régulière, vous pourriez avoir une bibliothèque enveloppe qui enveloppe les fonctions de dll C dans les classes C ++ et fonctions
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top