通常的做法是从动态库中剥离符号表(Windows上为.dll,OSX上为.dylib,Linux / Solaris / BSD上为.so)。这是有道理的,因为它大大减少了文件库的文件大小,通常超过75%。
然而,这个问题一直困扰着我:剥离的图书馆没有符号表。如果我编写一个引用此库中的函数的可执行文件,那么当没有符号表来提供此信息时,操作系统的动态链接器如何知道在剥离库中的代码部分的位置?
这个问题既包括在编译时链接可执行文件之前删除库的情况,也包括在编译时链接可执行文件后删除库的情况。
如果有人可以向我解释,那就太好了!感谢。
答案 0 :(得分:10)
运行strip时剥离的符号是调试符号,而不是实际导出符号的名称。
动态符号(链接器搜索的符号)仍然存在,可以使用-D(列表动态符号)参数列出。