去掉符号表
https://www.jianshu.com/p/af6d0cefdfae
动态链接库/优化---清除符号表信息¶
1. 符号表类型¶
动态链接库是ELF(Executable and Linkable Format)文件的一种,有两个符号表:
| 符号表类型 | 说明 |
|---|---|
| .symtab | 包含大量的信息(包括全局符号global symbols) |
| .dynsym | 只保留.symtab中的全局符号 |
2. 符号表移除¶
正常情况下编译出的共享库包含了所有的符号信息与调试信息,对于开发和调试会非常方便。但是对于正常的Release版本我们并不需要这些信息,同时这些信息会占用比较大的磁盘空间。
我们可以通过strip工具来实现对共享库部分符号信息的移除
同时我们还可以链接阶段使用ld的-s和-S参数,使得连接器生成的输出文件时就不产生符号信息。
-s和-S的区别在于-S移除调试符号信息,而-s移除所有符号信息。
同时,我们也可以在GCC中通过-Wl,-s和-Wl,-S来移除符号信息。
.dynsym 是 .symtab的子集,命令strip会去掉ELF文件中.symtab,但不会去掉.dynsym。