共享库(动态链接)
共享库以 .so(Shared Object)为后缀,是在加载时或运行时才被链接到内存中的特殊目标文件。
加载时链接:程序启动时,动态链接器(ld.so)将共享库加载到内存,并将程序中对库函数的引用重定向到库中的实际地址。这是最常见的动态链接方式。
运行时链接:程序运行期间通过 dlopen、dlsym 等 API 动态加载共享库,实现插件系统的灵活架构。
优势:
- 节省内存和磁盘空间:多个进程共享同一个
.so的物理内存中的代码副本(代码段共享)。 - 独立更新:更新共享库后,只要保持函数接口(ABI)不变,依赖它的程序无需重新编译。
查找路径:动态链接器默认在标准路径(/lib、/usr/lib)查找库文件。LD_LIBRARY_PATH 环境变量可以添加额外的搜索路径。
与静态库的区别:静态库将代码直接嵌入可执行文件;共享库仅在加载时映射到进程地址空间,可执行文件本身不包含库代码。
链接到
- 上一个知识点:7.13 静态库
- 下一个知识点:7.15 库打桩机制