Linux 之 动态库与静态库 (2)

书接上文,本篇博客是为博客 Linux 之 动态库与静态库 (1)的案例。

例如:
Linux 下,自设的 newtry 目录中包含三个文件
在这里插入图片描述
其中,main.c 中包含 testlib.h ,即 main.c 会调用 testlib.c 中的内容。当成功运行后,会打印出 “这是一个实验程序” !
但若直接将 main.c 进行编译,其会报错,如图
在这里插入图片描述
此时,若想实现 main.c 调用 testlib.c 中的内容,则可通过链接 动态库静态库 来实现。

1)动态库的使用实现
a、生成二进制文件
输入代码

gcc -fPIC -c testlib.c -o testlib.o 

如图中的 testlib.o 即为生成的二进制文件
在这里插入图片描述
b、生成动态库
输入代码

gcc --shared testlib.o ... -o libtestlib.so 

注 :代码中 ... 代表的是其他 .o 文件
如图,其中的绿色字体是为生成的动态库,且动态库名称为 testlib
libtestlib.so :该库的名称为 testlib, lib.so 是命名格式)
在这里插入图片描述
c、链接动态库
输入代码

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./

此处为了方便使用,直接采用了 “三、库的使用” 中的 “2、设置环境变量” 的操作,如图
在这里插入图片描述
该种方法就不用将生成的动态库保存至默认路径下了。
读者可自行尝试 “三、库的使用” 中的其他两种方法去解决库的链接,此处不再赘述。

d、库的使用
直接调用 “三、库的使用” 中的代码即可,即

gcc main.c -o mymain -ltestlib

如图,会生成 mymain 执行文件
在这里插入图片描述
其运行结果为
在这里插入图片描述
2)静态库的使用实现
a、生成二进制文件
与 1)中的 “a、生成二进制文件” 内容一致,此处不再赘述!

b、生成静态库
输入代码

ar -cr libtestlib.a testlib.o ...

注:代码中 ... 代表的是其他 .o 文件
如图,其中的 libtestlib.a 是为生成的静态库,且静态库名称为 testlib
libtestlib.a :该库的名称为 testlib, lib.a 是命名格式)
在这里插入图片描述
c、链接静态库
因为 1)中的 “c、链接动态库” 使用的是设置变量的方法,所以此步骤换另一个方法,即将库文件添加至默认路径下,如输入代码

sudo cp ./libtestlib.a /usr/lib64/

注:此处应添加的库文件是静态库,所以输入代码时需注意输入库文件的格式
在这里插入图片描述
d、库的使用
依旧是调用 “三、库的使用” 中的代码,具体见 1)中的 “d、库的使用”。
如图,会生成 mymain 执行文件
在这里插入图片描述
其运行结果依然为
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值