2016-03-02 243 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