【已解决】/lib/x86_64-linux-gnu/libapr-1.so.0: undefined reference to `uuid_generate@UUID_1.0`

1 问题背景

环境:

  • Ubuntu20.04
  • ROS noetic
  • Anaconda

现象:编译一个ROSRviz插件报错:

/usr/bin/ld: /lib/x86_64-linux-gnu/libapr-1.so.0: undefined reference to ‘uuid_generate@UUID_1.0’

在这里插入图片描述

2 问题探索

下载一个辅助工具locate

sudo apt install locate
sudo updatedb

locate命令用于搜索和定位文件,且相比find命令搜索速度更快,同时也支持在搜索文件时使用正则表达式。

另一个有用的内置命令是ldd,它用来打印或者查看程序运行所需的共享库(访问共享对象依赖关系),常用来解决程序因缺少某个库文件而不能运行的一些问题。而本文遇到的问题正是库的链接问题,因此需要用到ldd

接着按以下思路探索:

  1. 报错信息指出是动态链接库libapr-1.so.0未定义对uuid的引用,因此查看该库对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 (0x00007fdfdd2f1000)
    
  2. 定位系统中的库文件

    locate libuuid.so.1
    

    得到

    /home/winter/Project/anaconda3/lib/libuuid.so.1
    /snap/core/14447/lib/x86_64-linux-gnu/libuuid.so.1
    /snap/core/14784/lib/x86_64-linux-gnu/libuuid.so.1
    /snap/core18/2697/lib/x86_64-linux-gnu/libuuid.so.1
    /snap/core18/2708/lib/x86_64-linux-gnu/libuuid.so.1
    /snap/core20/1822/usr/lib/x86_64-linux-gnu/libuuid.so.1
    /snap/core20/1828/usr/lib/x86_64-linux-gnu/libuuid.so.1
    /usr/lib/x86_64-linux-gnu/libuuid.so.1
    

    关键点在于:系统中安装了Anaconda,因此系统调用库文件时其实调用了/home/winter/Project/anaconda3/lib/libuuid.so.1路径下的库

  3. 分别查看这两种库使用的版本

    系统版本

    ll /lib/x86_64-linux-gnu/ | grep uuid
    -rw-r--r--   1 root root     47314 2月   7  2022 libuuid.a
    lrwxrwxrwx   1 root root        38 2月   7  2022 libuuid.so -> /lib/x86_64-linux-gnu/libuuid.so.1.3.0
    lrwxrwxrwx   1 root root        16 2月   7  2022 libuuid.so.1 -> libuuid.so.1.3.0
    -rw-r--r--   1 root root     30936 2月   7  2022 libuuid.so.1.3.0
    

    Anaconda版本

    ll Project/anaconda3/lib | grep uuid
    -rw-rw-r--  2 winter winter     29830 10月  6  2021 libuuid.a
    lrwxrwxrwx  1 winter winter        16 4月  10  2022 libuuid.so -> libuuid.so.1.0.0*
    lrwxrwxrwx  1 winter winter        16 4月  10  2022 libuuid.so.1 -> libuuid.so.1.0.0*
    -rwxrwxr-x  2 winter winter     22480 10月  6  2021 libuuid.so.1.0.0*
    

    可以看到系统版本中libuuid.so.1实际指向1.3.0版本,而Anaconda版本中libuuid.so.1实际指向1.0.0版本,版本的差异导致引用的未定义

3 问题解决

将Anaconda版本中libuuid.so.1指向系统版本1.3.0即可

rm Project/anaconda3/lib/libuuid.so.1
sudo ln -s /lib/x86_64-linux-gnu/libuuid.so.1 Project/anaconda3/lib/libuuid.so.1

检查软链接情况

ll Project/anaconda3/lib | grep uuid
-rw-rw-r--  2 winter winter     29830 10月  6  2021 libuuid.a
lrwxrwxrwx  1 winter winter        16 4月  10  2022 libuuid.so -> libuuid.so.1.0.0*
lrwxrwxrwx  1 root   root          34 3月  21 12:25 libuuid.so.1 -> /lib/x86_64-linux-gnu/libuuid.so.1
-rwxrwxr-x  2 winter winter     22480 10月  6  2021 libuuid.so.1.0.0*

更改成功,重新编译

在这里插入图片描述

4 告别Bug

本文收录于《告别Bug》专栏,该专栏记录人工智能领域中各类Bug以备复查,文章形式为:问题背景 + 问题探索 + 问题解决,订阅专栏+关注博主后可通过下方名片联系我进入AI技术交流群帮忙解决问题


🔥 更多精彩专栏


👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇
在给定的命令中,"sudo ln -s /usr/lib/x86_64-linux-gnu/libmpfr.so.6 /usr/lib/x86_64-linux-gnu/libmpfr.so.4" 是用于创建一个软链接的命令。软链接是一个指向另一个文件或目录的引用,类似于快捷方式。在这个命令中,我们将"/usr/lib/x86_64-linux-gnu/libmpfr.so.6"软链接到"/usr/lib/x86_64-linux-gnu/libmpfr.so.4"上。这样,当系统在使用"/usr/lib/x86_64-linux-gnu/libmpfr.so.4"时,实际上会访问到"/usr/lib/x86_64-linux-gnu/libmpfr.so.6"这个文件。因此,这个命令的目的是将"libmpfr.so.6"的功能扩展到"libmpfr.so.4"上,以便于程序或系统在使用这个库时的兼容性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [No rule to make target '/usr/lib/x86_64-linux-gnu/libGL.so](https://blog.csdn.net/ba99783/article/details/101559761)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [undefined](undefined)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.Winter`

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值