该程序是根据协议缓冲区运行时库的2.6.1版编译的,该库与已安装的版本(3.5.0)不兼容

时间:2019-05-21 09:15:27

标签: c++ protocol-buffers

当我将可执行文件和lib依赖项复制到另一台计算机并运行该程序时,出现此错误:

  

该程序是根据Protocol Buffer运行时库的2.6.1版编译的,该库与已安装的版本(3.5.0)不兼容。请与程序作者联系以获取更新。如果您自己编译程序,请确保标头与链接时库来自相同版本的协议缓冲区。

此错误仅在新计算机上发生。我可以在计算机上运行程序而没有任何问题。

我尝试用ldd -dobjdump -p engine | grep NEEDED检查其中哪个库带有protobuf,但找不到它们。

我的程序使用:带有Cuda的opencv,boost,tensorflow,tensorRT。

计算机操作系统均为Ubuntu 16.04.6 LTS。

如何找到与该冲突有关的问题?

我尝试通过添加-DBUILD_PROTOBUF=OFF -DPROTOBUF_UPDATE_FILES=ON -DPROTOBUF_INCLUDE_DIR=/usr/include -DPROTOBUF_LIBRARY=/usr/lib/x86_64-linux-gnu/libprotobuf.so重新编译不带protobuf的opencv。

这不能解决问题。

1 个答案:

答案 0 :(得分:0)

您有两个不同的版本 libprotobuf,其中一个通过动态库安装在 /usr/local/lib/ 中。

但是当您构建程序时,您会包含其他版本的 libprotobuf

您可以重新安装 libprotobuf 来解决这个问题。

如果您从源代码安装 libprotobuf,请确保您添加了标志 -Dprotobuf_BUILD_SHARED_LIBS=ON