根據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...