本人在ubuntu20.04上安装anaconda之后,之前能够编译通过的包现在编译反而报错,报错信息简要如下,后面信息还有很长,就只提取了关键的地方:
Errors << ocs2_legged_robot_ros:make /home/wan/six_legged/logs/ocs2_legged_robot_ros/build.make.001.log /usr/bin/ld: /home/wan/anaconda3/lib/libboost_log.so.1.82.0: undefined reference to
std::__throw_bad_array_new_length()@GLIBCXX_3.4.29'
/usr/bin/ld: /home/wan/anaconda3/lib/libboost_log.so.1.82.0: undefined reference to********
这里表示anaconda下面的boost库与系统的编译器存在冲突,不兼容。发现自己现在是在anaconda 的base环境下编译的,终端输入
conda deactivate
退出anaconda环境下之后这个报错信息仍然存在(这里建议cpp的包都不要在虚拟环境下编译,否则容易出现很多不兼容的问题),这个表示系统调用boost库仍然还是调用的是anaconda 的,查看在安装anaconda之前编译好的包,**/build/**/CMakeCache.txt文件下boost调用的路径如下:
Boost_DIR:PATH=/usr/lib/x86_64-linux-gnu/cmake/Boost-1.71.0
Boost_FILESYSTEM_LIBRARY_RELEASE:STRING=/usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.71.0
可以发现两个boost库的版本并不一样,所以现在需要将编译使用到的boost库由anaconda更换为/usr/lib/的。于是可以在catkin build之前在终端输入以下指令:
export LD_LIBRARY_PATH=$(echo $LD_LIBRARY_PATH | sed -e 's|/home/wan/anaconda3/lib:||g')
export CMAKE_PREFIX_PATH=$(echo $CMAKE_PREFIX_PATH | sed -e 's|/home/wan/anaconda3:||g')
export BOOST_ROOT=/usr
export BOOST_INCLUDEDIR=/usr/include
export BOOST_LIBRARYDIR=/usr/lib/x86_64-linux-gnu
gpt自动生成的,不知道这个指令有没有冗余的,如果想要永久生成,就可以在~/.bashrc文件最下面添加上面的指令,最后再即可
source ~/.bashrc
以上只是给大家提供了一个解决类似问题的思路