C++编译时遇到protobuf版本不一致的问题

问题描述

我们的项目中会引用到各种sdk,项目代码和sdk中都有可能会使用protobuf。当protobuf版本不一致时,编译就会报错。有两种可能的报错信息

This file was generated by a newer version of protoc which is incompatible with your Protocol Buffer headers.  Please update your headers.

This file was generated by an older version of protoc which is incompatible with your Protocol Buffer headers.  Please regenerate this file with a newer version of protoc.

这两类报错的可以归结为一类,就是该被include进去的头文件(*.pb.h)同依赖的protobuf的环境版本不一致。

Protobuf环境

我们先来看一下protobuf自身的环境。Bin文件夹(protoc工具,用于将业务自身的proto文件翻译成代码);include文件夹(google protobuf自带的头文件,被前者所依赖);lib文件夹(静态包或动态包,项目链接时会用到)。

一种错误情形

项目所依赖的sdk中,自带了业务的*.pb.h文件,这个文件是和项目所使用的不同版本的protoc所生成的。而在编译时,这些*.pb.h和*.pb.cc文件会include项目自带的google protobuf的头文件。当这两者的版本出现不一致时,就会报上述的错误。

如何解决

一种解决方案就是所有的sdk都需要上传*.proto文件,项目在编译时,强制使用项目自身依赖的protoc工具,生成sdk中的*.pb.h和*.pb.cc文件。这样就能保证项目引用sdk被强制同自身使用的protobuf版本保持一致。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值