我在安装来自源代码和Protobuf库的控制模块时遇到了一些问题。
我有一个程序,需要Protobuf3.1。和OpenCV 3.2与控制模块。在从源代码编译和安装这两个程序之后,程序本身就会编译和链接良好。在执行程序时,我得到以下错误:
此程序是针对协议缓冲区运行库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()的实例后调用的终止:该程序是针对协议缓冲区运行时库的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链接了
虽然我的Protobuf3.1在/usr/local/中,但是opencv使用libprobuf3.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)非常感谢你的努力。
比尔·佛里安
发布于 2017-04-05 20:12:30
好的,构建WITH_QT=ON不再需要libmir,因此不再需要libprobuf2.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 ..https://stackoverflow.com/questions/43236034
复制相似问题