协议缓冲区错误版本

Posted

技术标签:

【中文标题】协议缓冲区错误版本【英文标题】:Protocol Buffer Error version 【发布时间】:2017-07-12 08:54:56 【问题描述】:

我正在尝试安装 Caffe 库,但由于系统中安装了错误的 protobuf 版本,我遇到了编译问题。

In file included from .build_release/src/caffe/proto/caffe.pb.cc:5:0:
.build_release/src/caffe/proto/caffe.pb.h:17:2: error: #error This file was generated by an older version of protoc which is
 #error This file was generated by an older version of protoc which is
  ^
.build_release/src/caffe/proto/caffe.pb.h:18:2: error: #error incompatible with your Protocol Buffer headers. Please
 #error incompatible with your Protocol Buffer headers.  Please
  ^
.build_release/src/caffe/proto/caffe.pb.h:19:2: error: #error regenerate this file with a newer version of protoc.
 #error regenerate this file with a newer version of protoc.

我遵循了论坛中提出的许多方法,我认为最相似的问题已在in this post 中进行了讨论。

在 caffe.pb.h 中的控制是:

#if 3002000 < 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

但是在我的系统头文件(/usr/include/google/protobuf/stubs/common.h)中:

The current version, represented as a single integer to make comparison
easier:  major * 10^6 + minor * 10^3 + micro
define GOOGLE_PROTOBUF_VERSION 2005000

从终端命令 protoc --version 返回 libprotoc 3.2.0

所以我安装了 3.2 版本,但系统头文件没有更新。 上一篇文章中的一位用户评论说:“我找到了一种方法,首先在 PATH 变量中指定我想要的 protobuf,而无需删除其他版本的 protobuf(其他内容取决于旧版本)。”

有人可以逐步解释我如何遵循这个吗? 或者我可以更新系统标题吗?有很多元素连接到 libprotoc,所以我想避免损坏它们。

谢谢

【问题讨论】:

【参考方案1】:

我在我的电脑上解决了这个问题,也许它可以帮助你。我的环境是Ubuntu16.04,在安装Caffe之前安装了Anaconda(for python2.7)。碰巧我使用 conda 安装 libprotobuf-dev,这导致与 caffe 的“sudo apt-get install libprotobuf-dev”命令发生冲突,因为“apt-get”和 conda 在我的计算机上安装的不同,可以通过'locate protobuf',所以我删除了 Anaconda 的 libprotobuf 版本,没有问题再次发生。

conda uninstall libprotobuf
conda uninstall protobuf

在安装Caffe之前安装tensorflow,也会出现这个问题,因为libprotobuf冲突。

【讨论】:

以上是关于协议缓冲区错误版本的主要内容,如果未能解决你的问题,请参考以下文章

google.protobuf.message.DecodeError:协议缓冲区中标签错误的接线类型错误

Cython 缓冲区协议示例错误

如何在项目和团队之间共享和版本化协议缓冲区(proto)接口?

带有协议缓冲区的 ASP.NET WebApi - 错误处理

协议缓冲区,让 C# 与 C++ 对话:类型问题和架构问题

协议缓冲区扩展和 toString()