J'ai un projet de bibliothèque partagée qui est construit à partir de 4 bibliothèques statiques (.a
) et d'un fichier objet (.o
). J'essaie d'ajouter l'option -fvisibility=hidden
pour limiter les symboles dans la sortie à ceux que je marque dans la source avec un attribut __attribute__.Comment appliquer l'option gcc -fvisibility aux symboles dans les bibliothèques statiques?
J'ai ajouté l'option -fvisibility=hidden
aux options de compilation pour le projet .so
(qui couvre le fichier .o
) et pour les .a
projets.
Les symboles dans le fichier objet sont supprimés comme prévu du .so
final. Cependant, les symboles des projets .a
sont toujours dans le fichier final .so
. L'ajout de l'option -fvisibility=hidden
à la commande de lien .so
n'a aucun effet.
Qu'est-ce que je fais mal?
Mon but ici est d'enlever du .so
tous les symboles sauf les fonctions d'interface à la bibliothèque.
EDIT: J'ai effectivement utilisé un version map pour résoudre ce problème pour le moment. Cependant, cela nécessite une maintenance continue du script de version lorsque les symboles externes changent. La réponse acceptée a une meilleure idée.
Plate-forme non mentionné, mais une solution pour Ce faisant sous iOS/OS X voir http://stackoverflow.com/a/18949281/316487 – bleater