libapr-1.so.0:對‘uuid_generate@UUID_1.0’未定義的引用問題解決

在ros項目編譯的過程中,有時會出現/usr/lib/x86_64-linux-gnu/libapr-1.so.0: undefined reference to `uuid_generate@UUID_1.0’的錯誤。經查找原因發現是都是由於ros和anaconda的兼容問題引起的,ros編譯出現這種錯誤均可用該套路解決。
問題解決過程:
1、從報錯中提取兩個關鍵字:這裏爲libapr-1.so.0和uuid
2、查找以上兩個庫在電腦中的位置:


locate libapr-1.so.0
顯示結果
/usr/lib/x86_64-linux-gnu/libapr-1.so.0

3、查看該庫對第二個關鍵字的依賴包的位置

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)

4、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

這些就是第二個關鍵字的庫的所有位置,我們想讓ros使用系統的庫/lib/x86_64-linux-gnu/libuuid.so.1,但是由於anaconda的存在,使用的卻是/home/XXX/anaconda3/lib/libuuid.so.1
可以分別查看這兩種庫使用的版本:

$ ll /lib/x86_64-linux-gnu/ |grep uuid
顯示結果
lrwxrwxrwx  1 root root      20 12月 15:25libuuid.so.1 -> libuuid.so.1.3.0
-rw-r--r--  1 root root   18976 20 12月  15:25 libuuid.so.1.3.0
$ ll /home/XXX/anaconda3/lib/ |grep uuid

可以看出系統庫使用的實際是1.3.0版本,而anaconda使用的是1.0.0版本
5、最後一步就是把anaconda中的庫鏈接到系統的庫(這種方法不一定是最好的,但是比較簡單)

sudo rm /home/xxx/anaconda3/lib/libuuid.so.1
sudo ln -s /lib/x86_64-linux-gnu/libuuid.so.1 /home/ct/anaconda3/lib/libuuid.so.1

最後發現conda命令也可以使用,ros工程也編譯通過,完美。
感謝博主:https://www.codeleading.com/article/87512571131/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章