最近编译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

如何查看符号表

linux下动态库符号表,Linux动态库(.so)符号表相关推荐

  1. 一个Linux下的 俄罗斯方块游戏,基于 ncurse 库。。

    2019独角兽企业重金招聘Python工程师标准>>> 几天前写得一个Linux下的 Tetris 游戏,基于 ncurses  库.. 望大家多多指教,功力太浅,多提代码的改进意见 ...

  2. linux环境下ps命令行,Linux下ps命令详解 Linux下ps命令的详细使用方法

    Linux下ps命令详解 Linux上进程有5种状态:1. 运行(正在运行或在运行队列中等待) 2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 3. 不可中断(收到信号不唤醒和不可运 ...

  3. linux 下查看应用版本信息,Linux下查看版本信息

    Linux下如何查看版本信息, 包括位数.版本信息以及CPU内核信息.CPU具体型号等. 1.# uname -a   (Linux查看版本当前操作系统内核信息) 2.# cat /proc/vers ...

  4. linux下查看文件的权限,Linux下查看文件权限、修改文件权限的方法

    查看权限命令查看目录的相关权限可以采用命令ls -lD,或者直接用ls -la 如 ls -l www.jb51.net  //这里表示查看www.jb51.net目录 修改权限命令 chmod 77 ...

  5. linux下剪切文件怎么恢复,linux下文件夹的创建、复制、剪切、重命名、清空和删除命令...

    在home目录下有wwwroot目录,wwwroot下有sinozzz目录,即/home/wwwroot/sinozzz 一.目录创建 在/home/wwwroot目录下新建一个sinozzz123的 ...

  6. linux格式化大于2t硬盘分区,linux下大于2tb硬盘格式化及挂载,linux下大于2t的分区方法,linux gpt分区表 管理 自动挂载分区...

    linux下大于2tb硬盘格式化及挂载,linux下大于2t的分区方法,linux gpt分区表 管理 自动挂载分区 (7页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找 ...

  7. linux下能运行python,(转)Linux下运行python

    原文: http://blog.csdn.net/jackywgw/article/details/48847187 在linux命令行下运行python,可以直接输出hello world jack ...

  8. linux下的zz命令,[zz]Linux下压缩命令

    一.Linux下和windows下的压缩文件的几个说明 在Windows下最常见的压缩文件就只有两种,一是,zip,另一个是.rar.可是Linux就不同了,它有.gz..tar.gz.tgz. bz ...

  9. 马上6 linux客户端,三款 Linux 下的 Git 图形客户端 | Linux 中国

    原标题:三款 Linux 下的 Git 图形客户端 | Linux 中国 了解这三个 Git 图形客户端工具如何增强你的开发流程. -- Jack Wallen 致谢 编译自 | https://ww ...

  10. linux下安装.hex文件,HexEdit Linux下命令集

    Linux下Ganglia集群监控安装.配置笔记 http://www.blogjava.net/henry14/archive/2011/12/17/ganglia.html 枪声依旧 Linux下 ...

最新文章

  1. Android环境变量的设置(详细图解版)
  2. android 解压版sdk安装的问题
  3. node_modules
  4. 视图插入数据_SAP Fiori的ABAP编程模型-CDS视图创建
  5. 九度oj 1006 ZOJ问题 2010年浙江大学计算机及软件工程研究生机试真题
  6. ios-UIImageView的一些常用的方法
  7. 阿里云日志添加要查询字段
  8. Jenkins操作手册
  9. iosselect简单使用(三级联动)
  10. FreeWheel容力:如何打造更高质效的技术团队
  11. linux 可执行文件去除绝对路径
  12. mysql与php6_PHP与MySQL的连接
  13. 机器视觉技术在薄膜检测系统的应用
  14. Spring依赖注入的三种方式
  15. 19.深入浅出:正弦波振荡电路——参考《模拟电子技术基础》清华大学华成英主讲
  16. maven ojdbc6和ojdbc8 jar包下载地址
  17. 为unigui程序搭建chrome手机浏览器(B4A)
  18. 2019上半年个人成长复盘
  19. 科学家要用3D打印技术复制大脑,今后人类都可以“永生”了
  20. 不止跑路,拯救误操作rm -rf /*的小伙儿

热门文章

  1. vue国际化-vue-i18n的配置
  2. linux 下用户管理
  3. javascript和jq的事件委托
  4. 基于mysql-proxy读写分离
  5. Cocos2d-x-3.x特性变化
  6. Android Service的思考(3)
  7. Silverlight4 学习视频(四)
  8. 解决iframe 右边有空白的问题
  9. asp.net工程中aspx文件与codebehind文件的关联问题
  10. hmailserver和rounduce安装