国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Linux動態庫(.so)符號表

2019-11-08 00:24:48
字體:
來源:轉載
供稿:網友

       最近編譯libbinder.so發現system/lib/libbinder.so只有358K,但單獨編譯生成的obj/SHARED_LIBRARIES/libbinder_intermediates/LINKED/libbinder.so有5M多,原因是前者做了strip命令操作。

1.動態鏈接庫的符號表

  動態鏈接庫(shared object library)在linux里以.so結尾,是elf(Executable and Linkable Format)文件的一種,有兩個符號表:“.symtab”和“.dynsym”。

.symtab:包含大量的信息(包括全局符號global symbols).dynsym:只保留“.symtab”中的全局符號

故“.dynsym”可看作“.symtab”的子集。故命令strip會去掉elf文件中“.symtab”,但不會去掉“.dynsym”。

2.為什么要strip?

  這和ELF有關,ELF文件包含allocable/non-allocable ELF section。

allocable:ELF包含一些sections(如code/data)是在運行時需要的,這些section被稱為allocable。non-allocable:其他一些sections僅僅是linker/debuger等工具需要但運行時不需要,被稱為non-allocable。

當Linker構建ELF文件時,把allocable/non-allocable分開存放,當OS加載ELF時,僅僅allocable數據被映射到內存,non-allocable的數據仍靜靜地呆在文件中不被處理。所以strip命令的作用就是移除non-allocable sections。

具體請參考動態鏈接庫和符號.

3.如何查看符號表?

未被strip的so庫:執行nm libbinder.so即可(默認查看.symtab符號表)。被strip的so庫:由于.symtab符號表被移出,需要加上-D參數,如nm -Do libbinder.so。否則使用nm時提示no symbol。

Android中編譯binder庫后生成目錄有: system/lib/libbinder.so:只有幾百K obj/SHARED_LIBRARIES/libbinder_intermediates/LINKED/libbinder.so:有幾M。

文章結構:

動態鏈接庫的符號表為什么要strip如何查看符號表



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 外汇| 聂荣县| 社旗县| 咸宁市| 收藏| 德昌县| 沙田区| 铜陵市| 军事| 许昌市| 尼勒克县| 台山市| 渭源县| 南宫市| 类乌齐县| 建德市| 云霄县| 渝北区| 南充市| 从江县| 曲靖市| 镇安县| 济南市| 澜沧| 仁寿县| 长武县| 舒城县| 石景山区| 丹东市| 台中市| 黄浦区| 保定市| 清苑县| 乡宁县| 永年县| 新绛县| 出国| 东台市| 札达县| 肥西县| 康定县|