OpenCV 3.2 包括与 protobuf 3.1 冲突的 libmir* 和 protobuf 2.6

Posted

技术标签:

【中文标题】OpenCV 3.2 包括与 protobuf 3.1 冲突的 libmir* 和 protobuf 2.6【英文标题】:OpenCV 3.2 includes libmir* and protobuf 2.6 which is conflicting with protobuf 3.1 【发布时间】:2017-04-05 15:52:23 【问题描述】:

我在使用来自源代码和 Protobuf 库的 contrib 模块安装 OpenCV 时遇到了一些问题。

我有一个程序,需要 Protobuf 3.1。和带有贡献模块的 OpenCV 3.2。从源代码编译和安装后,程序本身编译和链接良好。执行程序时出现以下错误:

[libprotobuf FATAL google/protobuf/stubs/common.cc:78] 该程序是针对 Protocol Buffer 运行时库的 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::protobuf::FatalException' 的实例后调用终止 what():该程序是针对 Protocol Buffer 运行时库的 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(usr/lib/x86_64-linux-gnu/ 中的 libprotobuf-lite.so.9)

当我的 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*(显然是通过 apt 安装的 libmirclient9 或 libmirclient-dev 或 libmircommon5 等)以及它用于 / 的用途是什么? Opencv 3 的哪个部分/库/模块使用了 libprotobuf 2.6 和 libmir? 如何在不使用任何 protobuf 库(或链接到它的库)的情况下配置 Opencv 3 的构建 在没有 protobuf 2.6 或 libmirprotobuf 的情况下编译我自己的程序的任何其他方式

非常感谢您的努力。

BR弗洛里安

【问题讨论】:

【参考方案1】:

好的,构建 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 ..

【讨论】:

以上是关于OpenCV 3.2 包括与 protobuf 3.1 冲突的 libmir* 和 protobuf 2.6的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV 3.2正式发布啦

opencv 3.2安装

VideoCapture 似乎不适用于 Debian - opencv 3.2

OpenCV 3.2 FlannBasedMatcher

[CV之旅] 环境搭建VS2015 + opencv 3.2

C++编程中使用框架protobuf