2010-08-25 17 views
13

Tengo una pregunta sobre el atributo de visibilidad de C++. He leído http://gcc.gnu.org/wiki/Visibility y todavía no entiendo cómo funciona.C++ -fvisibility = hidden -fvisibility-inlines-hidden

Quiero utilizar la visibilidad para que se oculte en algunas de mis bibliotecas compartidas que tengo. Creo que esto significa que los símbolos están ocultos?

¿Cómo se pretende vincular la biblioteca compartida? ¿Hay alguna forma especial? Si lo enlace como normalmente se vincula, no funciona.

¿Alguien me puede ayudar por favor?

Respuesta

23

-fvisibility=hidden hace todos sus símbolos ocultos de forma predeterminada.

Lo que tienes que hacer es elegir qué funciones quieres que sean visibles para los usuarios que enlazan con tu biblioteca y hacerlas visibles marcándolas con un atributo visible.

E.g.

void __attribute__((visibility("default"))) Exported() 
{ 
    // ... 
} 
+0

Gracias. Eso realmente ayudó. – nixgadgets

+2

Y, naturalmente, querrá crear una macro como 'MYLIB_PUBLIC' o algo similar para hacer este limpiador. –

3

Reduce la necesidad de mantener la información de símbolos privada en Objetos Compartidos.

Considere un objeto compartido que tiene más de 10.000 símbolos (funciones/variables globales), pero solo 100 de ellos son funciones públicas a las que pueden acceder los usuarios de la biblioteca. Podemos hacer que las únicas 100 funciones sean visibles para otros & restantes 9,900 símbolos como privados.

Reducirá el tamaño del objeto compartido también, porque es una tabla de reubicación que tendrá solo 100 símbolos de información. El uso de este indicador junto con -funciones -función -fdata-sección reducirá aún más el tamaño del objeto compartido teniendo la definición que es relevante para esos 100 símbolos.

Cuestiones relacionadas