2009-06-05 18 views
2

..., une suite à this.éliminant le problème d'incompatibilité entre les compilateurs avec les bibliothèques dynamiques C++

Des réponses que j'ai donné à ma question référencé 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 de construit avec le compilateur A un projet construit avec le compilateur B,
  • la bibliothèque peut être construit comme statique en me sauvant y compris n en-tête et les fichiers source dans le projet ou l'exportation des symboles. (. Il ne peut toujours pas enregistrer la reconstruction de la bibliothèque pour une utilisation avec un compilateur différent)

Avoir regarder de plus près 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 SDL, je lie statiquement contre libSDL.a, qui, à son tour, lier dynamiquement à SDL.dll, ce qui élimine le besoin de différentes versions .dll pour différents compilateurs. La question est de savoir si c'est vraiment le cas et une solution viable au problème, ou est-ce que je manque quelque chose (et quoi)?

Répondre

3

Je pense que votre approche est bonne. 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ée pour que les fonctions de la DLL puissent être appelées directement, plutôt que d'être chargées par le nom
  • Au lieu d'une bibliothèque d'importation régulière, vous pouvez avoir une bibliothèque wrapper qui encapsule les fonctions C de la DLL en C++ classes et fonctions
+0

merci de le signaler (et désolé): s aying "le problème n'est pas présent avec les bibliothèques statiques" est carrément faux. Je vais le corriger maintenant. – zyndor