本文主要是介绍【已解决】/lib/x86_64-linux-gnu/libapr-1.so.0: undefined reference to `uuid_generate@UUID_1.0`,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
- 1 问题背景
- 2 问题探索
- 3 问题解决
- 4 告别Bug
1 问题背景
环境:
- Ubuntu20.04
- ROS noetic
- Anaconda
现象:编译一个
ROS
的Rviz
插件报错:
/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
接着按以下思路探索:
-
报错信息指出是动态链接库
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)
-
定位系统中的库文件
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
路径下的库 -
分别查看这两种库使用的版本
系统版本
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技术交流群帮忙解决问题
🔥 更多精彩专栏:
- 《ROS从入门到精通》
- 《Pytorch深度学习实战》
- 《机器学习强基计划》
- 《运动规划实战精讲》
- …
这篇关于【已解决】/lib/x86_64-linux-gnu/libapr-1.so.0: undefined reference to `uuid_generate@UUID_1.0`的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!