J'ai créé une bibliothèque statique dans GCC, mais j'aimerais cacher la plupart des symboles.Avec GCC, comment exporter uniquement certaines fonctions dans une bibliothèque statique?
Par exemple, test1.c:
extern void test2(void);
void test1(void) {
printf("test1: ");
test2();
}
test2.c:
extern void test1(void);
void test2(void) {
printf("test2\n");
}
library_api.c:
extern void test1(void);
extern void test2(void);
void library_api(void) {
test1();
test2();
}
Maintenant compilez avec:
gcc -c test1.c -o test1.o
gcc -c test2.c -o test2.o
gcc -c library_api.c -o library_api.o
ar rcs libapi.a test1.o test2.o library_api.o
Comment puis-je obtenir que le "library_api()" fonction pour afficher pour:
nm libapi.a
au lieu des fonctions "test1()", "test2()" et "library_api()"? En d'autres termes, comment cacher "test1()" et "test2()" d'apparaître et être appelable aux utilisateurs externes de libapi.a? Je ne veux pas que les utilisateurs externes sachent quoi que ce soit sur les fonctions de test internes.
Déclarer le symbole 'static' n'aide pas non plus à le cacher dans la bibliothèque statique. –
@Pavel: c'est sûr. Vous ne pouvez pas créer de lien avec un symbole statique. Si vous le souhaitez, vous pouvez également supprimer tous les symboles statiques après la compilation. –
J'ai essayé "ld -r --retain-symboles-fichier tmp.list test1.o test2.o bibliothèque_api.o -o libapi.a" où tmp.list contient juste "library_api" et "nm libapi.a" montre encore les symboles test1 et test2 sont globaux. Des idées? – Will