Éviter les symboles exportateurs de Linux sur executables
Question
Je trouve que lorsque j'associez un exécutable contre 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 rien exporter.
Je l'ai essayé fournir un script de version, mais il semble faire aucune 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 lui-même.
La solution
Exécutables n'exportent des symboles par défaut, et ne le feront pas à moins que vous utilisez -Wl, - dynamique export. Cela est nécessaire que si vous êtes dynamique chargement des bibliothèques qui eux-mêmes doivent relier en symboles dans l'exécutable principal (ce qui est un cas fréquent en C ++ si vos bibliothèques contiennent des classes qui surchargent les méthodes virtuelles dans l'exe)
Peut-être que vous confondez symboles exportateurs d'avoir des symboles de débogage. symboles de débogage seront produits au profit du débogueur (si vous ne supprime pas l'exe), mais ne sont pas tenus d'exécuter.
Autres conseils
Utilisez strip
?