2010-04-07 19 views
4

J'ai créé une bibliothèque partagée sur linux x86. En le créant, je suis lié statiquement dans openssl. OpenSSL est seulement utilisé en interne mais je vois que les symboles openssl ont été exportés. Cela provoque des problèmes pour les autres bibliothèques qui ont besoin de ma bibliothèque ET openssl parce que le mauvais symbole peut être chargé à l'exécution. Est-il possible d'empêcher l'exportation de tous les symboles openssl lorsque je les lie statiquement dans ma bibliothèque partagée?Comment empêcher l'exportation de symboles d'une bibliothèque liée statiquement?

Merci, Mike

Répondre

0

En supposant que vous utilisez gcc, en liant votre bibliothèque, définissez -fvisibility = caché et dans votre source de bibliothèque, marquer toutes les fonctions que vous voulez être visible extern. Je pense que cela devrait fonctionner tant qu'easlsl n'a pas déclaré ses propres fonctions extern.

Je pense que si openssl a déclaré des symboles externes, vous pouvez forcer manuellement les symboles à être cachés avec des pragmas.

D'autres options sont possibles. Vérifiez les documents de GCC dans la section de visibilité pour une explication complète de ce qui est à votre disposition.

+1

Etes-vous sûr que cela fonctionne? L'impression qui me reste est que la visibilité ne s'applique qu'aux symboles dans DSO (objets partagés dynamiquement). Il n'est pas clair si l'OP relie un OpenSSL statique dans une bibliothèque partagée dynamique, mais je pense que votre stratégie fonctionnerait dans ce cas. Si l'OP crée une bibliothèque statique, je ne pense pas que les attributs de visibilité s'appliquent. Ce serait bien de découvrir différemment, cependant! –