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
我在安装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 ..
- 写入位置0x0000000C时发生访问冲突
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 带有Protobuf序列化的C++Hazelcast:字符串不是UTF-8格式的
- 链表中写入访问冲突的未知原因
- C++中的openCV Mat访问冲突
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- Google protobuf 时间戳未声明标识符,在 Windows 上具有C++
- C++尝试深度复制唯一指针时出现内存访问冲突
- 错误:使用通用引用的声明冲突
- 如何解决GTest和LibTorch联动冲突
- 两个运营商的一些奇怪的冲突<<
- 如何继承 Protobuf 生成的C++类
- Protobuf版本与Qt冲突
- 用第三方框架编译时Tensorflow Protobuf冲突
- OpenCV 3.2 包括 libmir* 和 protobuf 2.6,它们与 protobuf 3.1 冲突
- 使用Opencv和Tensorflow c++时发生Protobuf版本冲突
- protobuf-net into .proto 会产生枚举冲突