当我将可执行文件和lib依赖性复制到另一台计算机并运行程序时,我会收到此错误:
该程序是针对协议缓冲区运行时库的2.6.1版本编译的,该版本与已安装的版本(3.5.0(不兼容。请与程序作者联系以获取更新。如果您自己编译了程序,请确保您的标题来自与链接时间库的协议缓冲区的同一版本。
此错误仅发生在新计算机中。我可以在没有任何问题的情况下在计算机上运行程序。
我试图与ldd -d
和objdump -p engine | grep NEEDED
检查哪个Libs中有Protobuf,但我找不到它们。
我的程序使用:opencv with cuda,boost,tensorflow,tensorrt。
两个计算机OS是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
来重新编译OpenCV,而无需Protobuf。
这无法解决问题。
您有两个不同的版本libprotobuf
,一个由动态库中安装在/usr/local/lib/
中。
但是,当您构建程序时,您包括其他版本的libprotobuf
。
您可以重新安装libprotobuf
来解决此问题。
如果您从源安装libprotobuf
,请确保添加了标志-Dprotobuf_BUILD_SHARED_LIBS=ON
。