Anaconda:python3与moveit!的兼容问题

ROS在很多地方都与Python存在兼容问题,例如我最近所遇到的如何在python3中使用moveit_commander的问题。如果在python3中使用通过apt安装的moveit则会报错,唯一的方法就是从moveit的源代码编译。如果是只安装了ros的裸机,用python3对源代码编译是不会有任何问题的。但如果还安装了anaconda,问题就很大了。在编译的时候会出现如下的错误:

/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_perform@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_global_init@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'
collect2: error: ld returned 1 exit status

这说的是什么意思呢?意思就是在编译过程中所使用的curl与libcurl无法匹配。原本在安装ros(默认是根据官方文档中的方法安装)的过程中,curl会被安装。然后在安装anaconda的过程中又会安装一种curl,另外还有可能你自己本身也有通过源码安装curl,几种不同版本的curl之间会造成冲突。以下给出我的解决办法:

首先,查看系统所使用的curl

curl -V
which curl

如果输出以下内容,则说明当前所使用的为ros安装的那个,这样是最好的。

/usr/bin/curl

如果不是,建议请将其他地方的删掉,我的做法很粗暴,进入到输出路径,然后暴力删除。这样curl就先唯一确定了。

然后就是libcurl的问题,为了让系统所使用的libcurl与curl版本对应,我们强制所有的libcurl都指向ros要求使用的那个版本,即

/usr/lib/x86_64-linux-gnu/libcurl.so.4

可以通过如下指令查看系统所有的libcurl

locate libcurl.so
/home/yjy/anaconda2/lib/libcurl.so
/home/yjy/anaconda2/lib/libcurl.so.4
/home/yjy/anaconda2/lib/libcurl.so.4.5.0
/home/yjy/anaconda2/pkgs/libcurl-7.63.0-h20c2e04_1000/lib/libcurl.so
/home/yjy/anaconda2/pkgs/libcurl-7.63.0-h20c2e04_1000/lib/libcurl.so.4
/home/yjy/anaconda2/pkgs/libcurl-7.63.0-h20c2e04_1000/lib/libcurl.so.4.5.0
/usr/lib/x86_64-linux-gnu/libcurl.so
/usr/lib/x86_64-linux-gnu/libcurl.so.3
/usr/lib/x86_64-linux-gnu/libcurl.so.4
/usr/lib/x86_64-linux-gnu/libcurl.so.4.4.0

 

ros所要求使用的是哪一个呢?通过如下指令查看

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

一般是输出:

libcurl.so.4 => /usr/lib/x86_64-linux-gnu/libcurl.so.4

如上是没有问题的。如果路径不对,例如:

libcurl.so.4 => /usr/local/lib/libcurl.so.4

那么将原本的原软链接删除,建立新的软连接指向/usr/lib/x86_64-linux-gnu/libcurl.so.4

sudo rm -rf /usr/local/lib/libcurl.so.4
sudo ln -s /usr/lib/x86_64-linux-gnu/libcurl.so.4 /usr/local/lib/libcurl.so.4

同理对anaconda中所有libcurl如此操作。将其暴力删除还没试过,不知道有没有效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值