《Linkers and Loaders》中static shared library是否过时?与prelink何关联?
《Linkers and Loaders》中“静态共享库”相关疑问解答
一、“静态共享库”概念是否过时?
这个术语确实已经不再是行业主流表述,原因主要有两点:
- 这本书成书于20年前,当时共享库实现还处于分化阶段,“静态共享库”是对一种特殊动态链接模式的命名——它把符号地址绑定提前到链接阶段,但库代码仍延迟到运行时加载。而现在主流的动态链接体系(比如ELF
.so、Windows.dll)已经把这种模式整合为动态链接的预绑定优化,不再单独用“静态共享库”这个类别来区分。 - 当前行业已统一用“静态链接”和“动态链接”作为核心区分:静态链接是把库代码完全嵌入可执行文件,运行时无需额外加载;动态链接是运行时加载库文件,符号绑定可通过参数调整为提前绑定或延迟绑定。原来的“静态共享库”本质上属于动态链接的一种优化形式,现在直接用“动态链接+符号预绑定”来描述,不需要单独的术语。
从当前的术语体系和技术实现来看,“静态共享库”这个概念确实已经过时,很少被提及。
二、和prelink的关联
二者核心思路高度相关,都是为了减少运行时动态链接的开销:
- “静态共享库”的核心是提前在链接阶段完成符号地址绑定,只把库代码的加载延迟到运行时,以此避免运行时重定位的耗时。
- prelink则是这个思路的现代化延伸:它不仅会提前绑定符号地址,还会预先调整共享库的内存布局,让多个可执行文件可以共享同一个预加载到固定地址的库实例,进一步减少启动时的链接工作。
可以说prelink是“静态共享库”概念的升级实现,不过随着现代动态链接器的优化(比如延迟绑定的效率提升、ASLR地址随机化的普及),prelink的使用场景也在减少,但二者的核心目标——通过提前绑定降低运行时开销——是完全一致的。
内容的提问来源于stack exchange,提问作者cpp is hard
相关产品推荐
相关产品推荐

