编译程序时链接动态库so的一些问题

linux下开发程序,我们经常会调用第三方的动态库,大家可能经常会碰到cannot find lxxx类似的报错。

这类报错一般有三个可能。

第一种,电脑上没有相应的库,程序在链接的时候自然找不到该动态库。确认是不是这个问题非常简单,使用find命令搜索一下即可。若没有,安装对应的so程序即可。

第二种,电脑上有相应的库,但是库所在的目录不在编译搜索的目录内。一般/lib和/usr/lib是编译时的固定搜索目录,而一般/usr/local/lib就不是默认的搜索目录。解决这个问题也非常简单,一:在makefile中增加编译搜索目录,通过-L目录的方式完成,比如-L/usr/local/lib。二:将so拷贝至系统搜索目录,但是系统搜索目录一般都是一些系统的库,不建议将自己的库拷贝至该目录,这样比较乱。三:添加搜索目录,在/etc/ld.so.conf.d/目录下新建一个文件比如说opencv.conf,然后在该文件中加入.so文件的路径,比如/usr/local/lib 就可以了。第三种方式和第一种方式的差异在于,第一种改变的是当前编译程序的搜索目录,而第三种改变的是所有在该系统上编译程序的搜索目录。

第三种,电脑上有相应的库,库在的目录也在编译搜索的目录内。一般出现这种情况是电脑上只有libxxx.so.xx.xx.xx,而没有libxxx.so。而系统在搜索的时候一般是搜索的libxxx.so,这样就会搜索不到该动态库。解决的方法也很简单,新建一个软链接即可,新建一个libxxx.so指向电脑上存在的libxxx.so.xx.xx.xx。

一般通过以上三种方法,基本可以解决找不到动态库的问题。

附:c/c++编译运行时动态库搜索路径:https://blog.csdn.net/wuzhidefeng/article/details/106407250

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值