2010-12-01 4 views
9

J'utilise une bibliothèque de sources fermées (par Activ Financial) qui inclut avec leur API une distribution boost, à la fois des fichiers d'en-tête boostés et des fichiers de bibliothèque boostés. J'utilise également Boost dans ma base de code existante, et j'ai besoin d'utiliser Activ à partir de mon code existant.la bibliothèque de source fermée inclut la distribution de boost

Quelques points

  • Je peux résumer mon utilisation de Activ afin que l'ensemble des montants partie Activ à une seule classe, j'ai écrit ne pas exposer l'un des en-têtes ACTIV
  • Ce fichier d'en-tête unique n'utilise pas tout bénéfice quoi que ce soit
  • de cette façon, je peux faire en sorte que les parties de mon utilisation Activ code des fichiers de Boost HPP Activ, et mon code utilise les fichiers HPP mon Boost

mon inquiétude vient en liaison. Comment puis-je m'assurer que mon code dépendant d'Activ est relié à Boost d'Activ, et mes autres liens de code à mon Boost? J'utilise g ++ maintenant, je le ferai également dans VS2008. Je l'ai eu à travailler sur VS2008 avant, mais je n'ai aucune idée de comment tout est lié. Je veux essayer de m'assurer que c'est fait correctement.

Existe-t-il un moyen de le faire sans encapsuler davantage la partie Activ dans une bibliothèque dynamique?

Edit:

D'une part, mon produit final est toujours un fichier exécutable. Pour deux, je lie statiquement pour me booster. La bibliothèque Activ inclut à la fois les versions statiques et dynamiques des bibliothèques d'objets Boost, et je prévois de la lier statiquement.

Je ne passe jamais les objets Boost entre les codes qui utilisent des versions boost différentes.

La question est, comment puis-je lier un fichier cpp ou .o à des objets dans un fichier de bibliothèque, et assurez-vous d'autres .o fichiers contiennent un lien vers les objets identiques dans un autre fichier bibliothèque? Est-ce possible?

Répondre

3

La bibliothèque est-elle liée dynamiquement ou statiquement à Boost? Si elle est liée statiquement, la bibliothèque expose-t-elle les symboles dans la DLL (exportation declspec)?

Si la bibliothèque est lié statiquement et les symboles ne sont pas exposés, vous et ne passent pas de structures de données Boost (smart_ptr, fils, etc.) avant et en arrière, vous êtes probablement sûr d'utiliser votre propre version du Boost bibliothèque dans votre DLL.

+0

Voir ma modification. Fondamentalement, il semble que j'ai besoin d'un hack lors de la liaison. J'ai deux bibliothèques d'objets (chaque version de Boost) qui a des symboles identiques, mais un code non identique pour ces symboles, et je dois m'assurer que chacun de mes fichiers .o est lié aux fichiers Boa .a corrects. Pour autant que je sache, le lien ne peut être fait que tout-à-la-fois à la fin, donc je ne sais pas quoi faire. (Pour les fichiers include, le problème est plus facile, car je peux simplement compiler chaque fichier cpp avec une directive '-I' différente dans gcc.) Ai-je bien réfléchi? – Scott

Questions connexes