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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值