库版本引用问题的解决套路

授人以鱼不如授人以渔,把该类问题的解决方法进行了举例,希望大家用这个套路解决相应的问题。

问题举例

libapr-1.so.0:对‘uuid_generate@UUID_1.0’未定义的引用

分析

两个关键词,libapr-1.so.0和uuid

问题定位

通过四个步骤定位该问题。

  1. 通过locate找到共享库的位置
locate libapr-1.so.0

得到结果
在这里插入图片描述

  1. 通过ldd找到依赖的共享库列表中uuid相关的项目
ldd /usr/lib/x86_64-linux-gnu/libapr-1.so.0 |grep uuid
显示结果
libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007f7a01fd0000)

如果这步骤时出现提示“no version information available”,请参考如下文章
no version information available问题解决

  1. 通过locate定位共享库位置
locate libuuid.so.1
显示结果
/home/xxx/anaconda3/lib/libuuid.so.1
/home/XXX/anaconda3/lib/libuuid.so.1.0.0
/home/XXX/anaconda3/pkgs/libuuid-1.0.3-h1bed415_2/lib/libuuid.so.1
/home/XXX/anaconda3/pkgs/libuuid-1.0.3-h1bed415_2/lib/libuuid.so.1.0.0
/home/XXX/research/projects/libuuid-1.0.3/.libs/libuuid.so.1
/home/XXX/research/projects/libuuid-1.0.3/.libs/libuuid.so.1.0.0
/lib/x86_64-linux-gnu/libuuid.so.1
/lib/x86_64-linux-gnu/libuuid.so.1.3.0
  1. 通过ll命令,bash中为ls -al查看两个库版本
$ ll /lib/x86_64-linux-gnu/ |grep uuid
lrwxrwxrwx  1 root root      16 10月 10 17:34 libuuid.so.1 -> libuuid.so.1.3.0
-rw-r--r--  1 root root   18976 10月 10 17:34 libuuid.so.1.3.0
$ ll /home/ct/anaconda3/lib/ |grep uuid
-rw-rw-r--  2 ct   ct      26398 1月  12  2018 libuuid.a
-rwxrwxr-x  1 ct   ct        950 11月 28 09:09 libuuid.la*
lrwxrwxrwx  1 ct   ct         16 11月 28 09:09 libuuid.so -> libuuid.so.1.0.0*
lrwxrwxrwx  1 ct   ct         16 11月 28 09:09 libuuid.so.1 -> libuuid.so.1.0.0*
-rwxrwxr-x  2 ct   ct      18472 1月  12  2018 libuuid.so.1.0.0*

可以看出系统库使用的实际是1.3.0版本,而anaconda使用的是1.0.0版本

问题解决

  1. 方法1 删掉错误的(要备份)
cd /usr/local/lib
sudo mkdir backup.libuuid
sudo mv libuuid* backup.libuuid
  1. 方法2 覆盖错误的(要备份)
sudo mkdir backup.libuuid
sudo mv libuuid* backup.libuuid
sudo ln -s /lib/x86_64-linux-gnu/libuuid.so.1 /home/XXX/anaconda3/lib/libuuid.so.1
  1. 方法3 项目中引用正确的(推荐)
    添加到ROS中的CMakeLists.txt搜索路径
LINK_DIRECTORIES(/lib/x86_64-linux-gnu/)

target_link_libraries(class1_ros_qt_demo libuuid.so.1 ${QT_LIBRARIES} ${catkin_LIBRARIES})
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值