先创建静态库和动态库再链接使用。编译源码为.o文件,静态库用ar命令打包为libxxx.a,动态库需加-fPIC编译并用-shared生成libxxx.so;链接时均用-L. -lmath,运行前设置LD_LIBRARY_PATH确保动态库可加载。

在Linux系统中,开发动态库和静态库是程序模块化和代码复用的重要手段。掌握这两种库的创建与使用方法,有助于提升项目组织效率和运行性能。下面介绍如何从源码生成静态库和动态库,并进行链接使用。
静态库的创建与使用
静态库在编译时会被完整复制到可执行文件中,因此生成的程序不依赖外部库文件,但体积较大。
步骤如下:
- 将源文件编译为目标文件(.o),使用-c选项
- 使用ar命令将多个目标文件打包成静态库(.a)
- 在编译程序时链接该静态库
示例:
gcc -c math_func.c -o math_func.oar rcs libmath.a math_func.o
gcc main.c -L. -lmath -o main_static
其中-L.指定库路径为当前目录,-lmath表示链接libmath.a。
动态库的创建与使用
动态库在程序运行时加载,多个程序可共享同一份库文件,节省内存,更新方便,但需确保运行环境包含对应库。
步骤如下:
- 编译源文件时添加-fPIC选项生成位置无关代码
- 使用gcc -shared将目标文件打包为动态库(.so)
- 编译主程序时链接动态库
- 运行程序前确保系统能找到该库(可通过LD_LIBRARY_PATH或配置ldconfig)
示例:
gcc -fPIC -c math_func.c -o math_func.ogcc -shared -o libmath.so math_func.o
gcc main.c -L. -lmath -o main_shared
运行前设置库路径:
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH./main_shared
查看库信息与依赖关系
可以使用以下命令检查库类型及依赖:
- file libmath.a — 查看文件类型(静态库)
- file libmath.so — 显示为动态库
- ldd main_shared — 查看可执行文件依赖的动态库
- nm libmath.a — 查看静态库符号表
注意事项与最佳实践
- 命名规范:静态库命名为libxxx.a,动态库为libxxx.so
- 发布动态库时建议配置系统库路径或使用rpath指定运行时搜索路径
- 若需调试,编译时加入-g选项保留调试信息
- 版本管理:可在.so后加版本号如libmath.so.1,配合符号链接管理升级
基本上就这些。掌握静态库和动态库的制作流程,能让你更好地组织C/C++项目结构,提升开发效率。










