![](/img/trans.png)
[英]With gcc, how do I include a library (-lpthread) into my own static user library?
[英]With GCC, how do I export only certain functions in a static library?
我在GCC中創建了一個靜態庫,但是我想隱藏大部分符號。
例如,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();
}
現在編譯:
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
如何僅顯示“library_api()”函數以顯示:
nm libapi.a
而不是函數“test1()”,“test2()”和“library_api()”? 換句話說,如何隱藏“test1()”和“test2()”從顯示和可調用到libapi.a的外部用戶? 我不希望外部用戶知道任何有關內部測試功能的信息。
最簡單的解決方案是#include test1.c和test2.c到library_api.c
,並且只編譯該文件。 然后你可以使test1()和test2()靜態。
或者,您可以將目標文件與ld -r
組合使用,並使用objcopy --localize-symbols
在鏈接后使測試函數保持靜態。 由於這可能相當繁瑣,我真的推薦第一個選項。
ld有選擇權
--retain-symbols-file FILE僅保留FILE中列出的符號
允許您明確命名要保留的符號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.