linux下动态库的制作及错误处理
在Linux下使用各种软件时经常会涉及到动态库的链接,有时候装好软件就是因为找不到他的动态库依赖而导致软件起不来,今天就来教大家一个简单的动态库链接增加大家对动态库的理解。
1、动态库的介绍
动态库,也叫共享库。
动态库与用户编写的程序相互独立,不被包含在用户生成的可执行文件当中
2、原材料的准备
先准备三个制作动态库的原料add.c,sub.c,mydv.c

3.把他们编译成.o文件用命令 gcc -c add.c sub.c mydiv.c -fPIC

4.生成动态库 使用命令 gcc -shared -o libmymath.so 3个.o文件
这样就得到一个.so动态库

5.编写动态库需要的头文件 math.h如图里面包含了函数的声明

6.编写主函数调用

7.打包如图

把头文件放到inc,动态库放到lib,原料放到resource
7.生成可执行文件 gcc test.c -o a.out -l mymath -L ./lib -I ./inc 生成a.out
其中 -l : 指定动态库名(去掉lib前缀和.so后缀)
-L : 指定动态库所在文件夹
-I : 指定头文件所在位置 
8.执行出错 ./a.out

出错分析:这其实是由于程序运行时找不到动态库的位置,但是我们上面不是指定了动态库路径和名字吗?为什么还会出这个错误呢。下面介绍两个知识点
A:链接器 工作于链接阶段(预处理,编译,汇编,链接)就是我们的-l和-L
B: 动态链接器 工作于程序运行阶段,需要提供动态库所在目录位置
他俩的关系就是老婆饼与老婆的关系,没关系!所以现在我们需要解决的就是动态链接器。下面有四周方法解决,我主要使用一种一劳永逸的办法。

9.增加环境变量动态库路径
我们cd到home目录然后打开隐藏文件 vim .bashr加入一行lib路径如图

保存后source .bashr更新一下,然后回到动态库重新执行

成功!

浙公网安备 33010602011771号