如何減小linux下so的大小


在linux下有個工具叫做strip,這是一個可以將linux下的可執行文件的符號表去除,減少每個可執行文件的大小,這對於嵌入式方面很有必要。但是沒有了符號表也就意味着沒有辦法采用gdb進行調試,因為gdb調試是讀取ELF文件頭來獲取符號表,進而調試,但strip之后,可執行文件的ELF文件頭就沒有.symtab這個符號表,有的僅是動態符號表。在strip之后nm libxxx.so是看不到符號表的,nm -D libxxx.so可以看到動態符號表,但用處不大,但strip有個參數選項叫做--only-keep-debug,這個選項可以在strip的時候保留debug調試信息,但是strip有個弊端,就是什么樣的strip就處理什么樣的可執行文件,x86的strip處理不了ARM平台的庫。當然x86平台上肯定也有ARM的strip工具鏈。

首先,分離調試信息可以用來下面方法進行分離。

objcopy --only-keep-debug a.so a.so.debug

其次,分離后進行so的剝離

strip a.so

最后,一步需要將a.so.debug的路徑添加到strip之后的a.so,采用下面方法。

objcopy --add-gnu-debuglink=a.so.debug a.so

這樣做會在a.so中添加一個gnu_debuglink這樣一個段來保存debug文件的信息。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM