跳转至

去掉符号表

https://www.jianshu.com/p/af6d0cefdfae

动态链接库/优化---清除符号表信息

1. 符号表类型

动态链接库ELF(Executable and Linkable Format)文件的一种,有两个符号表:

符号表类型 说明
.symtab 包含大量的信息(包括全局符号global symbols)
.dynsym 只保留.symtab中的全局符号

2. 符号表移除

正常情况下编译出的共享库包含了所有的符号信息与调试信息,对于开发和调试会非常方便。但是对于正常的Release版本我们并不需要这些信息,同时这些信息会占用比较大的磁盘空间。

我们可以通过strip工具来实现对共享库部分符号信息的移除

GAS
strip xxxx.so

同时我们还可以链接阶段使用ld的-s-S参数,使得连接器生成的输出文件时就不产生符号信息。

-s-S的区别在于-S移除调试符号信息,而-s移除所有符号信息。

同时,我们也可以在GCC中通过-Wl,-s-Wl,-S来移除符号信息。

.dynsym.symtab的子集,命令strip会去掉ELF文件中.symtab,但不会去掉.dynsym

GAS
gcc -s
gcc -Wl,-s 
二者是一致的