2010-03-03 15 views
6

Estoy descubriendo que cuando vinculo un ejecutable con una biblioteca estática (.a), los símbolos de la biblioteca estática terminan siendo exportados por el archivo ejecutable. Me gustaría evitar esto y no exportar nada.Evitar exportar símbolos desde ejecutables en Linux

He intentado proporcionar un script de versión, pero parece no hacer ninguna diferencia. El contenido de mi guión versión son las siguientes:

{ 
    global: 
     main; 
    local: 
     *; 
}; 

¿Hay una manera de no exportar símbolos de un ejecutable al enlazar en una biblioteca estática? No puedo recompilar la biblioteca estática en sí misma.

Respuesta

7

ejecutables no exportan símbolos por defecto, y no lo harán a menos que utilice -Wl, - la exportación dinámico. Esto es necesario solo si está cargando dinámicamente bibliotecas que necesitan vincularse con símbolos en el ejecutable principal (este es un caso común en C++ si sus bibliotecas contienen clases que anulan los métodos virtuales en el exe)

Tal vez ' volver a confundir símbolos de exportación con símbolos de depuración. Los símbolos de depuración se producirán para el beneficio del depurador (si no se quita el exe), pero no es necesario que se ejecuten.

+1

Parece que gcc 4.8.2 (en arch Linux) exporta nombres de funciones de exec por defecto, evento if -fvisibility = hidden se usa. Y solo al sumar -s al enlazador se eliminan los símbolos. – aisbaa

3

Uso strip?

$ man strip

+0

Strip no detendrá los símbolos de exportación del ejecutable, si es que lo hace, ya que solo elimina la información de depuración. – MarkR

+1

@MarkR: lea la página man para strip - puede eliminar mucho más que solo símbolos de depuración –

+0

Pero si elimina las secciones que son necesarias para ejecutar, entonces el binario no se ejecutará más, obviamente :) – MarkR

Cuestiones relacionadas