我在使用源代码和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已链接
而我的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)
非常感谢您的努力。
BR Florian
答案 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 ..