Linux下減小動態庫大小的方法

在一些業務場景下,需要對動態庫的大小進行限制,主要有如下幾種方法:

1. 編譯選項使用-Os,表示以最小化大小爲優化方向

2. 去除-g選項,進而去除調試信息

3. 通過strip裁剪符號及調試信息

4. 只導出必要符號

Linux默認導出所有符號,並不僅僅導出你開放的接口!

定義如下宏:

#define SYMBOL_EXPORT __attribute__ ((visibility("default")))

在你想導出的符號前加上SYMBOL_EXPORT就好。

同時,需要在腳本中增加如下編譯選項:-fvisibility=hidden

譬如:導出符號是int add(int a, int b);那麼添加的結果就是SYMBOL_EXPORT int add(int a, int b);

通過這種方式只導出想導出的符號,也可以減小庫大小。

 

備註

“default”:用它定義的符號將被導出,動態庫中的函數默認是可見的。”hidden”:用它定義的符號將不被導出,並且不能從其它對象進行使用,動態庫中的函數是被隱藏的。

default意味着該方法對其它模塊是可見的。而hidden表面該方法符號不會被放到動態符號表裏,所以其它模塊(可執行文件或者動態庫)不可以通過符號表訪問該方法。

 

掃描二維碼,關注“小眼睛的夢囈”公衆號,在手機端查看文章
掃描二維碼,關注“清遠的夢囈”公衆號,在手機端查看文章

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章