Linux C语言高级编程之共享库(附测试案例)

共享库本质就是由若干个.o文件打包生成的.so文件。
链接共享库与链接静态库最大的不同之处在于:并不是将被调用代码指令复制到调用模块中,而是将被调用代码指令在共享库中的相对地址复制到调用模块中,体现在最终的可执行文件中。
共享库特性如下:
优点:
1)生成的可执行文件比较小,占用存储空间比较小;
2)修改和维护都比较方便,因为一旦代码有所改动,只要相对地址不变,则直接对可执行文件生效;
缺点:
1)需要跳转,因为执行效率比较低;
2)不能脱离共享库而独立运行可执行文件;
共享库的生成和调用步骤,如下:
(1)共享库的生成步骤:
a.编写源代码文件xxx.c,如:vi add.c
b.只编译不链接生成目标文件xxx.o,如:
cc -c -fpic/小模式 建议选项/ add.c
c.生成共享库文件
cc -shared 目标文件 -o lib库名.so
cc -shared add.o -o libadd.so
(2)共享库的调用步骤:
a.编写调用的源代码文件xxx.c,如: vi main.c
b.只编译不链接生成目标文件xxx.o,如:cc -c main.c
c.链接共享库文件,链接的方式有以下三种:
1)直接链接
cc 目标文件 共享库文件
cc main.o libadd.so
2)采用编译选项进行链接
cc 目标文件 -l 库名 -L 库文件的路径
cc main.o -l add -L .
3)配置环境变量方式进行链接
export LIBRARY_PATH= L I B R A R Y P A T H : 新 路 径 c c 目 标 文 件 − l 库 名 e x p o r t L I B R A R Y P A T H = LIBRARY_PATH:新路径 cc 目标文件 -l 库名 export LIBRARY_PATH= LIBRARYPATH:cclexportLIBRARYPATH=LIBRARY_PATH:.
cc main.o -l add

注意:
1)为了解决可执行文件运行时找不到共享库的问题,则需要配置环境变量LD_LIBRARY_PATH,具体的配置方法如下:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:共享库路径
2)当静态库和共享库同时存在并且库名相同时,使用第二个链接方法则会优先链接共享库,如果希望链接静态库,则需要使用-static选项来强制要求;

测试实例:
1、编写各部分的代码文件:
这里写图片描述

2、生成共享库
这里写图片描述
3、调试共享库
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coding13

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值