OpenCV 3.2 包括 libmir* 和 protobuf 2.6,它们与 protobuf 3.1 冲突

OpenCV 3.2 includes libmir* and protobuf 2.6 which is conflicting with protobuf 3.1

本文关键字:protobuf 冲突 包括 libmir OpenCV      更新时间:2023-10-16

我在安装OpenCV时遇到了一些问题,其中包含源代码和Protobuf库中的contrib模块。

我有一个程序,需要Protobuf 3.1.和OpenCV 3.2和contrib模块。从源代码编译和安装两者后,程序本身可以很好地编译和链接。执行程序时,出现以下错误:

[libprotobuf fattal google/protobuf/stubs/common.cc:78] 此程序是针对协议缓冲区运行时库的版本 2.6.1 编译的,该版本与已安装的版本 (3.1.0) 不兼容。 请与程序作者联系以获取更新。 如果您自己编译了程序,请确保您的标头与链接时库来自同一版本的协议缓冲区。 (版本验证在"/build/mir-pkdHET/mir-0.21.0+16.04.20160330/obj-x86_64-linux-gnu/src/protobuf/mir_protobuf.pb.cc"中失败。 在抛出"google::p rotobuf::FatalException"实例后终止调用 what():此程序是针对协议缓冲区运行时库的 2.6.1 版编译的,该版本与已安装的版本 (3.1.0) 不兼容。 请与程序作者联系以获取更新。 如果您自己编译了程序,请确保您的标头与链接时库来自同一版本的协议缓冲区。 (版本验证在"/build/mir-pkdHET/mir-0.21.0+16.04.20160330/obj-x86_64-linux-gnu/src/protobuf/mir_protobuf.pb.cc"中失败。

检查我的软件的链接库,我看到 protobuf 包含在 2.6 中。(SO.9) 和 3.1 (SO.11) 以及 libmir*.so

ldd localization | grep protobuf*
libprotobuf.so.11 => /usr/local/lib/libprotobuf.so.11 (0x00007f1797df8000)
libmirprotobuf.so.3 => /usr/lib/x86_64-linux-gnu/libmirprotobuf.so.3 (0x00007f178a751000)
libprotobuf-lite.so.9 => /usr/lib/x86_64-linux-gnu/libprotobuf-lite.so.9 (0x00007f178a31b000)

查看链接的库,我发现 Opencv 链接

  • libmir 库(使用 protobuf)
  • Protobuf 2.6 (libprotobuf-lite.so.9 in usr/lib/x86_64-linux-gnu/)

而我的 Protobuf 3.1 在/usr/local/中 opencv 也使用 libprotobuf 3.1。构建 DNN 部件等时。

~$ ldd /usr/local/bin/opencv* | grep libproto* 
libprotobuf-lite.so.9 => /usr/lib/x86_64-linux-gnu/libprotobuf-lite.so.9
ldd /usr/local/bin/opencv* | grep libmir*
libmirclient.so.9 => /usr/lib/x86_64-linux-gnu/libmirclient.so.9 (0x00007f1d59b4c000)
libmircommon.so.5 => /usr/lib/x86_64-linux-gnu/libmircommon.so.5 (0x00007f1d56d5f000)
libmirprotobuf.so.3 => /usr/lib/x86_64-linux-gnu/libmirprotobuf.so.3 (0x00007f1d56afe000)
  • 什么是 libmir*(libmirclient9 或 libmirclient-dev 或 libmircommon5 等显然是通过 apt 安装的),它的用途是什么?
  • Opencv 3 的哪个部分/库/模块使用 libprotobuf 2.6 和 libmir?
  • 如何在不使用任何 protobuf 库(或链接到它)的情况下配置 Opencv 3 的版本
  • 任何其他方法都可以在没有protobuf 2.6或libmirprotobuf的情况下编译我自己的程序

非常感谢您的努力。

BR 弗洛里安

好的,构建WITH_QT=ON消除了对 libmir 的需求,因此 libprotobuf 2.6

这是完整的 cmake 命令,它有效:

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON ..