¿Cómo aplicar la opción -visibilidad a los símbolos en bibliotecas estáticas?

Tengo un proyecto de biblioteca compartida que se construye a partir de 4 bibliotecas estáticas (.a) y un objeto (.o) archivo. Estoy tratando de agregar el-fvisibility=hidden opción para restringir los símbolos en la salida a solo aquellos que marque en la fuente con un __atributo__.

He añadido el-fvisibility=hidden opción para las opciones de compilación para el.so proyecto (que cubre el.o archivo) y para el.a proyectos

Los símbolos en el archivo objeto se eliminan como se esperaba de la versión final..so. Sin embargo, los símbolos de la.a todos los proyectos aún están en la final.so archivo. Agregar el-fvisibility=hidden opción a la.so El comando de enlace no tiene ningún efecto.

¿Qué estoy haciendo mal?

Mi propósito aquí es eliminar del.so todos los símbolos, excepto la interfaz, funcionan con la biblioteca.

EDITAR: en realidad usé unmapa de versión 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.

Respuestas a la pregunta(3)

Su respuesta a la pregunta