在Linux系统编程中,库是一种重要的代码复用方式。库分为静态库和动态库(也称为共享库)。本文将详细介绍两者的区别、创建方法及使用技巧,帮助小白快速入门。
库是预先编译好的函数集合,可供其他程序调用。使用库可以避免重复编译相同代码,便于模块化开发。Linux中库文件命名通常以"lib"开头,静态库后缀为.a,动态库后缀为.so。
静态库(.a)在程序编译链接时,会将库代码直接拷贝到可执行文件中。生成的可执行文件较大,但运行时不再依赖库文件。
假设我们有源文件add.c和sub.c,头文件math.h。首先编译成目标文件:
gcc -c add.c sub.c 得到add.o和sub.o。然后使用ar命令打包:
ar rcs libmymath.a add.o sub.o 其中rcs选项表示创建库并插入目标文件。
编译主程序main.c时,链接静态库:
gcc main.c -L. -lmymath -o main -L.指定库搜索路径为当前目录,-lmymath链接libmymath.a。
优点:部署简单,运行时无需库文件;缺点:浪费磁盘和内存空间,库更新需重新编译程序。
动态库(.so)在程序运行时动态加载,多个程序可共享同一份库代码,节省资源。
同样使用add.c和sub.c,编译时添加-fPIC生成位置无关代码,然后创建共享库:
gcc -fPIC -c add.c sub.cgcc -shared -o libmymath.so add.o sub.o 编译主程序:
gcc main.c -L. -lmymath -o main 运行时需要将动态库路径加入LD_LIBRARY_PATH或系统库路径,例如:
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH./main 优点:节省内存和磁盘空间,库更新无需重新编译程序;缺点:运行时依赖库文件,部署稍复杂。
| 特性 | 静态库 | 动态库 |
|---|---|---|
| 链接方式 | 编译时链接 | 运行时链接 |
| 文件大小 | 可执行文件大 | 可执行文件小 |
| 内存占用 | 每个进程一份 | 多进程共享一份 |
| 更新 | 需重新编译 | 替换so文件即可 |
链接器默认搜索/lib、/usr/lib等系统路径,也可通过-L指定。动态库运行时搜索路径包括:LD_LIBRARY_PATH、缓存文件/etc/ld.so.cache、默认系统路径。
总结:掌握静态库和动态库的创建与使用是Linux编程的基础。希望通过本文,你对链接过程和共享库有了清晰的认识。
本文由主机测评网于2026-02-26发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20260227220.html