动态库(Dynamic Library,也称共享库)的本质是在程序运行时(而非编译时)被加载和链接的代码模块,其核心原理是通过操作系统的动态链接机制实现代码的共享和灵活更新。以下是动态库的底层原理和关键特性详解:
1. 动态库的物理构成
-
位置无关代码(PIC, Position-Independent Code)
动态库通过 -fPIC
编译选项生成,代码不依赖固定内存地址,可被加载到任意内存位置(通过全局偏移表 GOT 和过程链接表 PLT 实现地址重定位)。
gcc -fPIC -shared libfoo.c -o libfoo.so
-
动态符号表(.d