Stworzyłem bibliotekę statyczną w GCC, ale chciałbym ukryć większość symboli.W GCC, w jaki sposób mogę eksportować tylko niektóre funkcje w bibliotece statycznej?
Na przykład 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();
}
Teraz skompilować z:
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
Jak mogę dostać tylko "library_api()" funkcji, aby pokazać się na:
nm libapi.a
zamiast funkcji "test1()", "test2()" i "library_api()"? Innymi słowy, w jaki sposób ukryć "test1()" i "test2()" przed wyświetlaniem i byciem wywołanym przez zewnętrznych użytkowników libapi.a? Nie chcę, aby użytkownicy zewnętrzni wiedzieli o wewnętrznych funkcjach testowych.
Deklaracja symbolu 'static' nie pomaga również w ukrywaniu go w bibliotece statycznej. –
@Pavel: na pewno to robi. Nie można łączyć z statycznym symbolem; w razie potrzeby można również usunąć wszystkie statyczne symbole po kompilacji. –
Próbowałem "ld -r --retain-symbols-file tmp.list test1.o test2.o library_api.o -o libapi.a" gdzie tmp.list po prostu zawiera "library_api" i "nm libapi.a" wciąż pokazuje symbole test1 i test2 jako globalne. Jakieś pomysły? – Will