C ++ -fvisibility = caché -fvisibility-inlines-hidden

J’ai une question sur l’atsortingbut de visibilité C ++. J’ai lu http://gcc.gnu.org/wiki/Visibility et pourtant je ne comprends pas très bien comment cela fonctionne.

Je veux utiliser la visibilité pour être caché sur certaines de mes bibliothèques partagées. Je crois que cela signifie que les symboles sont cachés?

Comment êtes-vous censé lier la bibliothèque partagée alors? Y a-t-il une manière spéciale? Si je lierais comment il est normalement lié, ça ne marche pas.

Quelqu’un peut-il m’aider s’il vous plaît.

-fvisibility=hidden rend tous vos symboles cachés par défaut .

Ce que vous devez ensuite faire, c’est choisir les fonctions que vous voulez voir visibles pour les utilisateurs qui lient votre bibliothèque et les rendre visibles en les marquant avec un atsortingbut visible.

Par exemple

 void __atsortingbute__((visibility("default"))) Exported() { // ... } 

Cela réduit la conservation des informations de symbole inutiles qui sont privées aux objects partagés.

Considérons un object partagé qui a plus de 10 000 symboles (fonctions / variables globales), mais seulement 100 étaient des fonctions publiques accessibles aux utilisateurs de la bibliothèque. Nous pouvons rendre les seules 100 fonctions visibles par les autres et les 9 900 symboles restants.

Cela réduira également la taille des objects partagés, car une table de relocalisation ne contiendra que 100 informations sur les symboles. L’utilisation de cet indicateur avec -ffunction-sections -fdata-section réduira davantage la taille de l’object partagé en ayant la définition pertinente pour ces 100 symboles.