linux下动态库的制作及错误处理

在Linux下使用各种软件时经常会涉及到动态库的链接,有时候装好软件就是因为找不到他的动态库依赖而导致软件起不来,今天就来教大家一个简单的动态库链接增加大家对动态库的理解。

​ 1、动态库的介绍

​ 动态库,也叫共享库。

​ 动态库与用户编写的程序相互独立,不被包含在用户生成的可执行文件当中

​ 2、原材料的准备

​ 先准备三个制作动态库的原料add.c,sub.c,mydv.c

3158458-20230725214049840-164726280

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

3158458-20230725214049589-85085721

​ 4.生成动态库 使用命令 gcc -shared -o libmymath.so 3个.o文件

​ 这样就得到一个.so动态库

3158458-20230725214049290-144466762

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

3158458-20230725214048996-2113853164

​ 6.编写主函数调用

3158458-20230725214048710-1776457612

​ 7.打包如图

3158458-20230725214048418-803125161

​ 把头文件放到inc,动态库放到lib,原料放到resource

​ 7.生成可执行文件 gcc test.c -o a.out -l mymath -L ./lib -I ./inc 生成a.out

​ 其中 -l : 指定动态库名(去掉lib前缀和.so后缀)

​ -L : 指定动态库所在文件夹

​ -I : 指定头文件所在位置 3158458-20230725214048120-1260441807

​ 8.执行出错 ./a.out

3158458-20230725214047817-1750706928

​ 出错分析:这其实是由于程序运行时找不到动态库的位置,但是我们上面不是指定了动态库路径和名字吗?为什么还会出这个错误呢。下面介绍两个知识点

​ A:链接器 工作于链接阶段(预处理,编译,汇编,链接)就是我们的-l和-L

​ B: 动态链接器 工作于程序运行阶段,需要提供动态库所在目录位置

他俩的关系就是老婆饼与老婆的关系,没关系!所以现在我们需要解决的就是动态链接器。下面有四周方法解决,我主要使用一种一劳永逸的办法。

3158458-20230725214047430-128724213

​ 9.增加环境变量动态库路径

​ 我们cd到home目录然后打开隐藏文件 vim .bashr加入一行lib路径如图

image-20230725214908050

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

3158458-20230725214046579-1520892901

​ 成功!

posted @ 2023-07-25 21:42  桂洛克船长  阅读(107)  评论(0)    收藏  举报