1.6 动态库的制作和使用

在这里插入图片描述

制作动态库

生成与位置无关的代码

gcc -c -fpic add.c div.c mult.c sub.c

得到动态库

gcc -shared add.o div.o mult.o sub.o -o libcalc.so

在这里插入图片描述

使用动态库

项目目录
在这里插入图片描述
把so文件拷贝到lib目录下
在这里插入图片描述

编译报错

gcc main.c -o main -I include/ -L lib/ -l libcalc.so

-I 头文件路径
-L动态库路径
-l(小L)动态库的名称

找不到共享库的位置
在这里插入图片描述

动态库原理

在这里插入图片描述
编译时不会报错,运行时报错。
运行时需要把动态库加载到内存中
当我们的程序使用动态库的一个API的时候,就会查找动态库的绝对路径,然后加载到内存当中。

ldd工具查看动态库位置

在这里插入图片描述

【方案1】解决动态库加载失败问题:添加LD_LIBRARY_PATH

1、临时添加动态库路径

添加动态库的绝对路径到环境变量
在这里插入图片描述
在这里插入图片描述

2、永远添加动态库路径

用户级别

打开系统的环境变量

vim .bashrc

添加so的绝对路径
在这里插入图片描述
使配置文件生效

. .bashrc 或 source .bashrc
系统级别

打开配置文件

sudo vim /etc/profile

添加动态库的绝对路径
在这里插入图片描述
使之生效

source /etc/profile

在这里插入图片描述
至此,配置好啦

【方案2】解决动态库加载失败问题:添加ld.so.cache

先删除/etc/profile的so的绝对路径
在这里插入图片描述
然后,刷新一下

. /etc/profile

接下来,开始配置:

  1. 打开ld.so.catch,注意直接用vim无效,需要使用sudo vim /etc/ld.so.conf
  2. 使用sudo ldconfig使之生效

在这里插入图片描述

这个就是打开/etc/ld.so.conf之后的效果,将so的绝对路径添加进去

在这里插入图片描述
检查一下是否成功添加,也可以成功运行
在这里插入图片描述

【方案3】解决动态库加载失败问题:添加lib,/usr/lib【不推荐使用】

lib,/usr/lib包含了系统自带的动态库文件,如果重名了的话会被替换,系统程序可能出问题

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值