靜態庫不要strip

2021-07-22 17:38:45 字數 1139 閱讀 6993

根據strip的功能表示,strip經常用來去除目標檔案中的一些符號表、除錯符號表資訊,減少包的大小.

我自己做了一函式庫,同樣的**生成了乙個mylib.so和乙個mylib.a檔案,之後使用了 strip mylib.so 和

strip mylib.a 這兩條命令去除一些符號表和除錯符號表資訊, 感覺這兩個庫檔案的體積大小確實縮小了,

使用 nm 命令也不會輸出這兩個庫檔案的符號清單.

比較怪異的是我分別使用這兩個去掉了符號資訊的庫檔案時,效果竟然不一樣。

gcc -o ta  test.c  mylib.a  和 gcc -o tso test.c  -l. -lmylib.so 我連線動態庫檔案時,編譯可以通過,

使用靜態庫檔案時,報告錯誤,在mylib.a中實現的函式找不到。如果不對mylib.a檔案進行strip命令的話,

編譯可以通過,一切正常。

關於這個問題,想請教一下各位,發布靜態庫檔案(.a)時,是否有需要使用strip命令去掉了所有的符號列表資訊?

有沒有什麼方法保證使用strip命令後也能正常使用該靜態庫檔案? 為什麼對so檔案使用了strip命令後不會影響它

和測試程式的鏈結?而且對靜態庫檔案就會鏈結不成功?

對應 *.o *.a 加引數. 不給引數的話當日會出事了。

-g-s

-d--strip-debug

remove debugging symbols only.

--strip-unneeded

remove all symbols that are not needed for relocation processing.

因為*.o 是relocatable elf檔案。 *.a 算是*.o的集合。所以最多是使用--strip-unneeded引數,符號不能刪除的太徹底。

file dio dio.o 

dio:   elf 64-bit lsb executable, x86-64, version 1 (sysv), dynamically linked (uses shared libs), for gnu/linux 2.6.15, not stripped

dio.o: elf 64-bit lsb relocatable, x86-64, version 1 (sysv), not stripped

打包靜態庫,合併靜態庫

ios靜態庫 a 和framework 合併靜態庫 1,開啟終端,輸入lipo create release iphoneos libsbjson.a release iphonesimulator libsbjson.a output combine libsbjson.a 其中release i...

靜態庫 a編譯和靜態庫 a合併

第一步 生成test.o目標檔案,使用gcc c test.c o test.o命令。第二步 使用ar將test.o打包成libtest.a靜態庫,使用ar rcs o libtest.a test.o命令 第三步 生成libtest.a靜態庫後,可以使用命令ar t libtest.a檢視libt...

Android 廣播不要使用靜態廣播

android 廣播不要使用靜態廣播android 廣播不要使用靜態廣播android 廣播不要使用靜態廣播android 廣播不要使用靜態廣播android 廣播不要使用靜態廣播android 廣播不要使用靜態廣播android 廣播不要使用靜態廣播android 廣播不要使用靜態廣播androi...