Tengo un proyecto de biblioteca compartida que se genera a partir de 4 bibliotecas estáticas (.a
) y un archivo de objeto (.o
). Estoy intentando agregar la opción -fvisibility=hidden
para restringir los símbolos en la salida a solo aquellos que marque en la fuente con un __ atributo.¿Cómo aplicar la opción de gcc -fvisibility a símbolos en bibliotecas estáticas?
He añadido la opción -fvisibility=hidden
a las opciones de compilación para el proyecto .so
(que cubre el archivo .o
) y para los proyectos .a
.
Los símbolos en el archivo de objeto se eliminan como se esperaba del final .so
. Sin embargo, los símbolos de los proyectos .a
están todavía en el archivo final .so
. Agregar la opción -fvisibility=hidden
al comando de enlace .so
no tiene ningún efecto.
¿Qué estoy haciendo mal?
Mi propósito aquí es eliminar del .so
todos los símbolos, excepto las funciones de interfaz de la biblioteca.
EDITAR: En realidad usé un version map para resolver esto por ahora. Sin embargo, requiere un mantenimiento continuo del script de versión a medida que cambian los símbolos externos. La respuesta aceptada tiene una mejor idea.
Plataforma no se menciona, pero para una solución de haciendo esto en iOS/OS X ver http://stackoverflow.com/a/18949281/316487 – bleater