Supposons que j'ai une bibliothèque foo qui se compose des modules foo et util et a l'arbre source suivante:Hiding symboles non-API dans la bibliothèque
foo/
foo.c
foo.h
util.c
util.h
L'API publique de la bibliothèque est défini dans foo.h et tous les identificateurs globaux sont correctement préfixés par foo_
ou util_
. Le module util est uniquement utilisé par foo. Pour éviter les conflits de noms avec d'autres modules nommés util Je souhaite créer une bibliothèque (statique) dans laquelle seuls les identificateurs du module foo sont visibles. Comment puis-je faire ceci? Edit: J'ai beaucoup cherché sur internet mais étonnamment cela semble être l'un de ces problèmes non résolus en informatique.
C'est une approche intéressante. Cependant, je préférerais une solution qui fonctionne au niveau du fichier objet. –
@AugustKarlstrom Je peux définitivement comprendre cette préférence. Cependant, je pense que ce serait une solution spécifique aux liens. J'ai édité ma réponse avec des détails. – Myst
L'approche GNU ld à laquelle vous êtes lié requiert la gestion manuelle d'un fichier de symboles exportés. Je devrais pouvoir dire que tous les symboles dans util.o devraient être cachés. –