1 问题描述
在Ubuntu下 Qt 中使用OpenCV需要在官方 GitHub 下载源码后在本地使用 CMake 进行编译。我在使用cmake
进行编译时出现了以下错误:
[ 36%] Built target opencv_ts
[ 36%] Linking CXX executable ../../bin/opencv_test_core
/usr/bin/ld: warning: libpcre.so.1, needed by //home/jk/anaconda3/lib/libglib-2.0.so.0, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libzstd.so.1.3.7, needed by //home/jk/anaconda3/lib/libtiff.so.5, not found (try using -rpath or -rpath-link)
根据报错可知是编译时想要使用anaconda3/lib/
的文件却不可用。
2 解决方案
将anaconda3/
目录中的文件删除并替换成/lib/x86_64-linux-gnu/
路径下文件的链接。
具体操作如下:
- 使用
locate
命令找到该文件的位置
locate libxxxx.xxx.so.x
对于我来说就是:
locate libglib-2.0.so.0
然后可以看到一系列的路径:
/home/jk/anaconda3/lib/libglib-2.0.so.0
/home/jk/anaconda3/lib/libglib-2.0.so.0.6301.0
/home/jk/anaconda3/pkgs/glib-2.63.1-h5a9c865_0/lib/libglib-2.0.so.0
/home/jk/anaconda3/pkgs/glib-2.63.1-h5a9c865_0/lib/libglib-2.0.so.0.6301.0
/lib/x86_64-linux-gnu/libglib-2.0.so.0
/lib/x86_64-linux-gnu/libglib-2.0.so.0.4800.2
/snap/core/9804/lib/x86_64-linux-gnu/libglib-2.0.so.0
/snap/core/9804/lib/x86_64-linux-gnu/libglib-2.0.so.0.4800.2
/snap/core/9993/lib/x86_64-linux-gnu/libglib-2.0.so.0
/snap/core/9993/lib/x86_64-linux-gnu/libglib-2.0.so.0.4800.2
/snap/core18/1880/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
/snap/core18/1880/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.5600.4
/snap/core18/1885/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
/snap/core18/1885/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.5600.4
/snap/vlc/1700/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
/snap/vlc/1700/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.5600.4
找到其中包含/anaconda3/lib/
和/lib/x86_64-linux-gnu/
的路径。
- 移除anaconda中原有文件
上面我们已经知道了文件在anaconda中的路径,使用rm
进行移除:
sudo rm /home/jk/anaconda3/lib/locate libxxxx.xxx.so.x
接着我上面的例子,我的命令就是
sudo rm /home/jk/anaconda3/lib/libglib-2.0.so.0
- 使用
ln
命令生成新的连接文件
sudo ln -s /lib/x86_64-linux-gnu/libxxxx.xxx.so.x /home/jk/anaconda3/lib/libxxxx.xxx.so.x
对于我的例子就是:
sudo ln -s /lib/x86_64-linux-gnu/libglib-2.0.so.0 /home/jk/anaconda3/lib/libglib-2.0.so.0
然后再次使用sudo make
命令就不会报这个错误了。