我在另一个 SO 线程中阅读:
对于静态库,复制的单位是库中的目标文件。
换句话说,如果两个程序从某个目标文件调用一个函数,那么两个程序最终都会得到可执行文件中的所有目标文件。
然而,上面的答案是从 2012 年开始的,我想知道更新的链接器是否提出了更智能的解决方案,即只将那些函数复制到实际需要的可执行文件中的解决方案(例如,因为其他函数依赖于它们)。
- 是否有任何一般原因表明这不是一个好主意或不可能?
- 有没有办法找出静态库中函数之间的依赖关系?链接器或链接过程是否提供此信息?
术语依赖是指某个库函数总是与另一个函数一起复制到可执行文件中的事实。
我的总体目标如下:
我有一个未知的二进制文件,但我知道它包含来自某个静态库的代码。我不知道图书馆的版本。我也知道这个可执行文件使用了这个静态库中的某个函数。我想知道可执行文件中还有哪些其他功能(无论是否实际使用)。
感谢您提供任何答案、评论或想法。