Anaconda和Moveit!中curl版本不同的問題

系統(tǒng)里面裝了Anaconda又裝了ros,執(zhí)行catkin_make編譯一個基于Moveit!的package時遇到了下面的問題:

Error Information:

/opt/ros/kinetic/lib/libresource_retriever.so: undefined reference to `curl_easy_setopt@CURL_OPENSSL_3'
/opt/ros/kinetic/lib/libresource_retriever.so: undefined reference to `curl_easy_cleanup@CURL_OPENSSL_3'
/opt/ros/kinetic/lib/libresource_retriever.so: undefined reference to `curl_easy_init@CURL_OPENSSL_3'
/opt/ros/kinetic/lib/libresource_retriever.so: undefined reference to `curl_global_cleanup@CURL_OPENSSL_3'
/opt/ros/kinetic/lib/libresource_retriever.so: undefined reference to `curl_easy_perform@CURL_OPENSSL_3'
/opt/ros/kinetic/lib/libresource_retriever.so: undefined reference to `curl_global_init@CURL_OPENSSL_3'
collect2: error: ld returned 1 exit status
make[2]: *** [devel/lib/moveit_setup_assistant/collisions_updater] Error 1
make[1]: *** [CMakeFiles/moveit_setup_assistant_updater.dir/all] Error 2
make: *** [all] Error 2

查到了這篇講的很詳細(xì)的參考:Anaconda:python3與moveit!的兼容問題,按照它里面的操作一步一步來。

首先查看系統(tǒng)中使用的curl:

curl -V
which curl

然后再看下ros要求使用的是哪一個:

ldd /opt/ros/kinetic/lib/libresource_retriever.so | grep curl

誒,檢查發(fā)現(xiàn),ros要用的是系統(tǒng)里的,但是現(xiàn)在默認(rèn)的是anaconda里面的。那怎么搞?

那篇文章提供的解決方案是把anaconda中的curl卸載掉,操作起來比較麻煩,而且還讓人擔(dān)心其它地方會不會有依賴,產(chǎn)生潛在未知的問題。

有沒有更簡單點的方法呢?還真有。

因為我們裝完anaconda后每次打開terminal都是自動激活anaconda里的base environment的,很多設(shè)置都是跟著這個base environment來的。所以,conda deactivate一下就行了!這時候再去執(zhí)行which curl就會發(fā)現(xiàn),它指向系統(tǒng)中的版本了,再去編譯就不再報錯了。對了,這里在catkin_make前要記得刪一下之前生成的CMakeLists.txt文件和build、devel文件夾,讓它重新編譯,否則還會有報錯信息。

如果不想每次都執(zhí)行conda deactivate的話,就執(zhí)行下面這句,

conda config --set auto_activate_base false

取消base environment的自動激活就好啦!

如果想要卸載curl的話,StackOverflow這里的討論提供了非常詳細(xì)的重定向鏈接的操作:CHENJIAN's answer。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容