动态库使用

 制作成功后使用./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目录中(不推荐使用)

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

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值