通常在动态库(Windows上的.dll,OSX上的.dylib和Linux/Solaris/BSD上的.so)中删除符号表是常见做法。这是有道理的,因为它可以大幅减小库文件的大小,通常超过75%。
然而,有一个问题一直困扰着我:一个被strip掉符号表的库并没有符号表。如果我编写一个引用该库中函数的可执行文件,当没有符号表提供信息时,操作系统的动态链接器如何知道在被strip掉符号表的库中定位代码段的位置?
这个问题包括两种情况,即在编译时链接可执行文件之前将库strip掉符号表的情况以及在编译时链接可执行文件之后将库strip掉符号表的情况。
然而,有一个问题一直困扰着我:一个被strip掉符号表的库并没有符号表。如果我编写一个引用该库中函数的可执行文件,当没有符号表提供信息时,操作系统的动态链接器如何知道在被strip掉符号表的库中定位代码段的位置?
这个问题包括两种情况,即在编译时链接可执行文件之前将库strip掉符号表的情况以及在编译时链接可执行文件之后将库strip掉符号表的情况。
readelf -Ws yourFile
(我不确定在Mac/BSD系统下是否可行)。 - user2485710