(已解决)Qt5与Anaconda3中Qt路径冲突的问题
环境:Ubuntu20.04+ROS+Anaconda
安装顺序ROS->anaconda
问题:在编译Qt时遇到错误如下
[ERROR]
/usr/bin/ld: /home/xjc/anaconda3/lib/libQt5Core.so.5.15.2: undefined reference to `std::__exception_ptr::exception_ptr::_M_release()@CXXABI_1.3.13'
/usr/bin/ld: /home/xjc/anaconda3/lib/libQt5Widgets.so.5.15.2: undefined reference to `std::__throw_bad_array_new_length()@GLIBCXX_3.4.29'
/usr/bin/ld: /home/xjc/anaconda3/lib/libQt5Core.so.5.15.2: undefined reference to `std::__exception_ptr::exception_ptr::_M_addref()@CXXABI_1.3.13'
collect2: error: ld returned 1 exit status
-------------------------------------分割线--------------------------------------------
[WARNING]
runtime library [libuuid.so.1] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
/home/xjc/anaconda3/lib
runtime library [libfreetype.so.6] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
/home/xjc/anaconda3/lib
runtime library [libz.so.1] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
/home/xjc/anaconda3/lib
runtime library [libpng16.so.16] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
/home/xjc/anaconda3/lib
runtime library [libtiff.so.5] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
/home/xjc/anaconda3/lib
runtime library [libexpat.so.1] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
/home/xjc/anaconda3/lib
runtime library [liblz4.so.1] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
/home/xjc/anaconda3/lib
Some of these libraries may not be found correctly.
找了一上午终于找到了原因。
原因:
在安装ROS和安装Anaconda时都会有安装qt,同时创建了两个有关于qt的cmake文件,在编译的时候选择了有一步
find_package(Qt5 REQUIRED ...)
这一步原本应该去寻找/usr/lib/x86_64-linux-gnu/cmake/Qt5/QtConfig.cmake
这个文件
但由于安装了anaconda所以这一步变为了寻找/home/${username}/Anaconda3/lib/cmake/Qt5/QtConfig.cmake
这个文件,导致后续编译时链接的库文件出错。所以报出以上错误。
尝试了多种方法,终于得到了解决。
解决方法1:(推荐)
限定我们要寻找的Qt5config.cmake文件的路径,也就是在CMakeLists.txt里添加
SET(CMAKE_PREFIX_PATH "/usr/lib/x86_64-linux-gnu/cmake")
重新编译即可解决问题。(如果问题没有得到解决,建议删除build文件夹下的所有内容,再次编译,即可通过)
解决方法2:(可用但较麻烦)
在~/.bashrc文件里面将有关anaconda的所有配置注释掉
gedit ~/.bashrc
# 注释以下内容
# __conda_setup="$('/home/xjc/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
# if [ $? -eq 0 ]; then
# eval "$__conda_setup"
# else
# if [ -f "/home/xjc/anaconda3/etc/profile.d/conda.sh" ]; then
# . "/home/xjc/anaconda3/etc/profile.d/conda.sh"
# else
# export PATH="/home/xjc/anaconda3/bin:$PATH"
# fi
# fi
# unset __conda_setup
重新编译即可解决问题。(如果问题没有得到解决,建议删除build文件夹下的所有内容,再次编译,即可通过)
解决方法3:(不推荐)
如果你已经遇到了这个问题,那说明你已经安装了Anaconda,这种方法有效但不推荐,如果前两种方法你已经尝试并且确实没有解决问题,可以尝试卸载anaconda并重新安装miniconda,miniconda中没有与Qt有关的库文件,所以理论上来说不会出现冲突的问题。
注:此方法仅由于在另一台设备上安装了miniconda没有遇到这个问题,本人在安装anaconda后遇到该问题并未尝试卸载重装miniconda的方法,此方法仅供参考,不推荐使用。
(找了一上午的方法,如果帮你解决了问题,点个赞呗!)