2010-03-03 4 views
6

Je constate que lorsque je lier un exécutable à une bibliothèque statique (.a), les symboles de la bibliothèque statique finissent par être exportés par le fichier exécutable. Je voudrais éviter cela et n'exporter rien.Éviter d'exporter des symboles à partir d'exécutables sous Linux

J'ai essayé de fournir un script de version, mais cela ne semble pas faire de différence. Le contenu de mon script version sont les suivantes:

{ 
    global: 
     main; 
    local: 
     *; 
}; 

Est-il possible de ne pas exporter les symboles d'un exécutable lors de la liaison dans une bibliothèque statique? Je ne peux pas recompiler la bibliothèque statique elle-même.

Répondre

7

n'exportent pas Exécutables symboles par défaut, et ne le feront pas à moins que vous utilisez -Wl, - dynamique export. Ceci est nécessaire uniquement si vous chargez dynamiquement des bibliothèques qui ont elles-mêmes besoin de lier des symboles dans l'exécutable principal (ceci est un cas courant en C++ si vos bibliothèques contiennent des classes qui remplacent les méthodes virtuelles dans l'exe)

re confusion des symboles d'exportation avec des symboles de débogage. Les symboles de débogage seront produits pour le bénéfice du débogueur (si vous ne déposez pas l'exe), mais ne sont pas requis pour fonctionner.

+1

Il semble que gcc 4.8.2 (sur arch linux) exporte les noms des fonctions exec par défaut, event si -fvisibility = hidden est utilisé. Et seulement ajouter -s à l'éditeur de liens supprime les symboles. – aisbaa

3

Utilisez strip?

$ man strip

+0

La bande n'arrêtera pas les symboles d'exportation exécutables, si c'est le cas, car elle ne supprime que les informations de débogage. – MarkR

+1

@MarkR: lire la page man pour strip - il peut supprimer beaucoup plus que des symboles de débogage –

+0

Mais si vous supprimez des sections qui doivent être exécutées, alors le binaire ne fonctionnera plus, évidemment :) – MarkR

Questions connexes