共享库(动态链接)

共享库以 .so(Shared Object)为后缀,是在加载时或运行时才被链接到内存中的特殊目标文件。

加载时链接:程序启动时,动态链接器(ld.so)将共享库加载到内存,并将程序中对库函数的引用重定向到库中的实际地址。这是最常见的动态链接方式。

运行时链接:程序运行期间通过 dlopendlsym 等 API 动态加载共享库,实现插件系统的灵活架构。

优势

  • 节省内存和磁盘空间:多个进程共享同一个 .so 的物理内存中的代码副本(代码段共享)。
  • 独立更新:更新共享库后,只要保持函数接口(ABI)不变,依赖它的程序无需重新编译。

查找路径:动态链接器默认在标准路径(/lib/usr/lib)查找库文件。LD_LIBRARY_PATH 环境变量可以添加额外的搜索路径。

与静态库的区别:静态库将代码直接嵌入可执行文件;共享库仅在加载时映射到进程地址空间,可执行文件本身不包含库代码。

链接到