2016-03-02 251 views
5

我目前得到指向我在由protoc产生的头文件,这些行错误:协议缓冲区错误

#if 2006001 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION 
#error This file was generated by an older version of protoc which is 
#error incompatible with your Protocol Buffer headers. Please 
#error regenerate this file with a newer version of protoc. 
#endif 

但我protoc版本匹配上面的一个:

protoc --version 
libprotoc 2.6.1 

我在做什么错?

最初我的protoc版本是3.0.0,然后通过同步回到2.6.1并执行步骤重新安装它; make distclean,./configure,make,make install来安装所需的2.6.1版本。我需要较旧的版本,因为那是安装在我们的服务器上的版本。

+1

您确定您之前(含3.0.0版本)生成的protobuf标头已被移除/更新吗? –

+0

是的,我明确删除了这些3.0.0头。我也检查过该文件,并且该版本的检查验证与上面编写的2006001版本比较 –

回答

10

问题是,系统上安装的标头(位于/ usr/include/google/protobuf或/ usr/local/include/google/protobuf)来自Protocol Buffers的新版本,而不是您的protoc。可能出现这种情况,您将两个版本安装在不同的位置,并且使用了错误的版本。

但我protoc版本匹配上面的一个:

是的,因为被你protoc生成的代码,它知道它自己的版本。代码问:“我的版本(2006001)是否低于安装标头声明所需的最低版本(GOOGLE_PROTOBUF_MIN_PROTOC_VERSION)?”

+0

有没有办法检查我的系统中安装的是哪个版本的头文件?我试图查看这些文件本身,无法找到它是什么版本的任何提示。 –

+4

@the_qbf:是的,查看'google/protobuf/stubs/common.h'并查找100行左右的'GOOGLE_PROTOBUF_VERSION'宏。 –

+1

有效和有用的答案,帮助我弄清楚我的问题。谢谢你,先生! – Vivit