动态库使用

本文介绍了当运行程序遇到动态库加载失败时的解决步骤,包括检查LD_LIBRARY_PATH环境变量,通过ldd命令查找依赖,以及在.bashrc或/etc/profile中持久化设置环境变量。此外,还探讨了编辑/etc/ld.so.conf并使用ldconfig更新缓存,以及避免将库放入/lib或/usr/lib的建议。
摘要由CSDN通过智能技术生成

 制作成功后使用./main运行出现如图所示的问题(动态库加载失败)。

因此我们这里尝试一下

ldd main

 

发现了libcalc.so => not found,也就是没有找到libcalc.so

因此我们尝试在上述环境变量或文件中添加动态库的绝对路径

DT_RPATH段是无法修改的

添加环境变量LD_LIBRARY_PATH

直接在当前目录中添加环境变量

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/gaizuo/linux/lesson06/library/lib

$LD_LIBRARY_PATH为引用LD_LIBRARY_PATH的值,:为拼接的意思,即在当前变量后面加上我们需要加载的动态库的绝对路径

成功添加后我们使用

ldd main

 查看main所使用的动态库的依赖关系,发现

	libcalc.so => /home/gaizuo/linux/lesson06/library/lib/libcalc.so (0x00007f7534502000)

成功找到动态库

尝试运行,成功!

但是这种方法是临时的,也就是关闭终端后就失效了,需要重新添加环境变量后才能成功 

用户级别配置

回到home目录下在.bashsrc中添加环境变量

 在最后一行加上与上一个方法相同环境变量即可

 添加完后重新运行一下.bashsrc,上述三种运行方式都是一样的,运行后到library目录下查看main所使用动态库的依赖关系发现成功找到动态库

系统级配置

删掉上一个方法中在./bashsrc中配置的环境变量并查看main的动态库依赖关系是否成功删除

使用sudo编辑/etc目录下的profile文件,和上两个方法一样在最后一行添加环境变量即可,添加完后保存并退出source一下,然后检查main的动态库依赖关系发现成功找到 

 运行成功

 

在/etc/ld.so.cache中添加路径

尝试直接用vim编辑./etc/ld.so.cache 

发现该文件是二进制文件无法编辑

 因此在/etc/ld.so.conf中添加动态库的绝对路径

 

然后使用sudo ldconfig更新ld.so.cache

检查main的动态库依赖关系发现成功找到动态库

将动态库添加到/lib或/user/lib目录中(不推荐使用)

因为这两个目录存放了许多系统的库文件,若把自己写的库文件放进去可能会影响系统运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值