这两天编 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