Linux 下用gcc生成静态库和动态库
一、用 gcc 生成 .a 静态库和 .so 动态库
1.创建一个 test1 文件夹,将 hello.c 编译成.o 文件
#mkdir test //创建test文件夹
#cd test1 //进入该文件夹
在该文件夹中创建三个子程序 hello.h、hello.c 和 main.c
分别是
2.由 .o文件创建静态库,在程序中使用静态库
gcc -c hello.c# 编译成 .o文件
ls # 查看
3.由.o 文件创建动态库文件,在程序中使用动态库
静态库文件名的命名规范是以 lib 为前缀,紧接着跟静态库名,扩展名为.a。
ar -crv libmyhello.a hello.o // 生成静态库
ls // 查看
先生成目标程序 hello,删除静态库文件试试公用函数 hello 是否真的连接到目标文件 hello 中
#gcc main.c libmyhello.a -o hello //连接
#rm libmyhello.a // 移除
./hello //查看、验证
gcc -shared -fPIC -o libmyhello.so hello.o //生成动态库
ls // 查看
-shared:该选项指定生成动态连接库
-fPIC:表示编译为位置独立的代码
4.当静态库和动态库同名时,gcc 命令会使用哪个库文件
先删除除.c 和.h 外的所有文件,恢复成我们刚刚编辑完举例程序状态
rm -f hello hello.o /usr/lib/libmyhello.so
ls
创建静态库文件 libmyhello.a 和动态库文件 libmyhello.so
gcc -c hello.c
ar -cr libmyhello.a hello.o
gcc -shared -fPIC -o libmyhello.so hello.o
ls
运行 gcc 命令来使用函数库 myhello 生成目标文件 hello,并运行程序 hello
gcc -o hello main.c -L. –lmyhello
用 gcc 生成 .a 静态库和 .so 动态库,当 libmyhello.so不在动态库目录/usr/lib 中时会出现错误。当静态库和动态库同名时,gcc 命令会优先使用动态库。
二、(1)Linux 下用静态库.a文件的生成与使用
1.编辑生成所需要的文件
A1.c
A2.c
A.H
test.c
2.生成目标文件(xxx.o),生成静态库.a 文件
3.使用.a 库文件,创建可执行程序
(2)共享库.so 文件的生成与使用
1.生成目标文件(xxx.o)、生成共享库.so 文件
2.使用.so 库文件,创建可执行程序
gcc -o test test.c libsofile.so
./test