Ho creato una libreria statica in GCC, ma mi piacerebbe nascondere la maggior parte dei simboli.Con GCC, come esportare solo determinate funzioni in una libreria statica?
Per esempio, 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();
}
Ora compilare con:
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
Come faccio ad avere solo il "library_api) (" la funzione di presentarsi per:
nm libapi.a
al posto delle funzioni "test1()", "test2()", e "library_api()"? In altre parole, come faccio a nascondere "test1()" e "test2()" da mostrare e essere richiamabile a utenti esterni di libapi.a? Non voglio che gli utenti esterni sappiano nulla delle funzioni di test interne.
La dichiarazione del simbolo 'static' non aiuta a nasconderla nella libreria statica. –
@Pavel: certo. Non puoi collegarti a un simbolo statico; se lo si desidera, è anche possibile rimuovere tutti i simboli statici dopo la compilazione. –
Ho provato "ld -r --retain-symbols-file tmp.list test1.o test2.o library_api.o -o libapi.a" dove tmp.list contiene solo "library_api" e "nm libapi.a" mostra ancora i simboli test1 e test2 come globali. Qualche idea? – Will