OpenCV 3.2包含与protobuf 3.1

时间:2017-04-05 15:52:24

标签: c++ linux opencv protocol-buffers

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

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

  

[libprotobuf FATAL google / protobuf / stubs / common.cc:78]此程序是针对Protocol Buffer运行时库的2.6.1版编译的,该版本与已安装的版本(3.1.0)不兼容。请与程序作者联系以获取更新。如果您自己编译了程序,请确保您的标题来自与链接时库相同的Protocol Buffers版本。 (" /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)不兼容。请与程序作者联系以获取更新。如果您自己编译了程序,请确保您的标题来自与链接时库相同的Protocol Buffers版本。 (" /build/mir-pkdHET/mir-0.21.0+16.04.20160330/obj-x86_64-linux-gnu/src/protobuf/mir_protobuf.pb.cc"。)中的版本验证失败。 p>

检查我的软件的链接库,我看到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 Florian

1 个答案:

答案 0 :(得分:2)

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