静态库(Static Library)
-
定义:静态库(如
.a
文件或.lib
文件)是编译时直接链接到可执行文件中的库。其代码和数据会被完整复制到最终的可执行文件中。 -
特点:
-
独立部署:无需依赖外部库文件。
-
体积较大:每个使用静态库的程序都包含库的副本。
-
更新困难:库更新需重新编译整个程序。
-
-
示例:
bash
复制
# 编译静态库 g++ -c mylib.cpp -o mylib.o ar rcs libmylib.a mylib.o # 链接静态库 g++ main.cpp -L. -lmylib -o main
动态库(Dynamic Library/Shared Library)
-
定义:动态库(如
.so
文件或.dll
文件)在程序运行时加载,多个程序可共享同一份库文件。 -
特点:
-
节省内存:多个进程共享同一内存中的库代码。
-
灵活更新:替换动态库文件后,所有依赖程序自动生效。
-
依赖管理:需确保运行时环境包含正确版本的库。
-
-
示例:
bash
复制
# 编译动态库 g++ -shared -fPIC mylib.cpp -o libmylib.so # 链接动态库 g++ main.cpp -L. -lmylib -o main
静态连接与动态连接
静态连接(Static Linking)
-
过程:将静态库的代码和数据直接复制到可执行文件中。
-
优点:
-
程序独立,无需运行时环境支持。
-
性能略高(无运行时加载开销)。
-
-
缺点:
-
可执行文件体积大。
-
库更新需重新编译程序。
-
动态连接(Dynamic Linking)
-
过程:在程序运行时加载动态库,通过符号表解析依赖。
-
优点:
-
节省磁盘和内存空间。
-
支持库的热更新。
-
-
缺点:
-
依赖环境配置(如
LD_LIBRARY_PATH
)。 -
首次加载有轻微性能开销。
-