APT 库冲突调试方法
这两天编 LVT2Calib 提示
/usr/bin/ld: warning: libopencv_imgcodecs.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_imgcodecs.so.4.5
我没有安装过 OpenCV,这说明 APT 装了两种不同的 OpenCV。
可以用 dpkg -S libopencv_imgcodecs
命令查看来源,发现 libopencv 和 libopencv-imgcodecs4.2 都安装了这个库。
其中,https://packages.ubuntu.com 可以搜到libopencv 不是 APT 的官方库。apt policy libopencv
可以找到
libopencv:
Installed: (none)
Candidate: 4.5.4-8-g3e4c170df4
Version table:
4.5.4-8-g3e4c170df4 500
500 https://repo.download.nvidia.com/jetson/common r34.1/main arm64 Packages
说明这是 Jetson 自己的库。进一步使用 apt rdepends libopencv
可以发现 libopencv-dev 依赖此库,而这就是正常的 OpenCV 所使用的包名。
apt policy libopencv-dev
查看 libopencv 的版本
libopencv-dev:
Installed: 4.2.0+dfsg-5
Candidate: 4.5.4-8-g3e4c170df4
Version table:
*** 4.5.4-8-g3e4c170df4 500
500 https://repo.download.nvidia.com/jetson/common r34.1/main arm64 Packages
4.2.0+dfsg-5 500
500 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 Packages
100 /var/lib/dpkg/status
可以发现 jetson安装了一个 4.5 版本的 OpenCV。
要修复这个库,最好直接sudo apt purge libopencv-dev
清掉现有内容,记得用dpkg -S
查看对应的内容是否已经清空,清空后重新sudo apt-get install libopencv-dev=4.2.0+dfsg-5
再安装其他的库,或者用一些方法锁住该版本:https://unix.stackexchange.com/questions/162700/apt-pinning-package-versions
https://unix.stackexchange.com/a/162785
/etc/apt/preferences.d/libopencv-dev
Package: libopencv-dev
Pin: version 4.2.0+dfsg-5
Pin-Priority: 999