You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言运行时库操作:共享库是否在运行时并入核心镜像?

静态库与共享库在ELF加载中的核心差异

首先直接给出结论:共享对象库不会在运行时被并入程序的“core-image”,二者的加载机制本质不同,你的理解存在关键误区。

静态库的加载逻辑

静态库(.a格式)是在编译链接阶段就被完全整合进最终的ELF可执行文件里。链接器会把你的代码、数据,加上程序用到的静态库代码片段,打包成一个单一的独立ELF文件。运行时,操作系统加载的就是这个完整文件,整个程序作为一个“core-image”驻留内存,没有额外的库加载步骤。

共享库的加载逻辑

共享库(.so格式)是在程序运行阶段由动态链接器(比如Linux下的ld-linux.so)单独处理的:

  • 你的ELF可执行文件里只存了共享库的依赖信息(比如库名、需要调用的符号),没有库的实际代码;
  • 程序启动时,动态链接器会找到对应的.so文件,把它加载到内存的独立区域;
  • 然后把程序中调用共享库函数的地址,跳转指向共享库在内存中的实际位置。

这种机制下,共享库的代码是独立于程序“core-image”存在的——多个程序可以共享同一份已加载的共享库内存镜像(这也是共享库节省内存、方便批量更新的核心优势),完全不存在“并入单个程序core-image”的情况。

误区澄清

你预期的“共享库并入core-image达到静态库效果”是对共享库设计目标的误解。共享库从诞生起就是为了实现代码共享、减小可执行文件体积、简化库的版本更新,它的加载机制和静态库从根上就不一样,不会被合并到程序的核心镜像中。

内容的提问来源于stack exchange,提问作者Barry Say

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 11:45:57