protbuf版本问题

在Ubuntu 18.04上使用Caffe时遇到protobuf版本错误,需要3.6.0但已安装3.0.0。解决方法包括移除旧版本protobuf,下载并编译安装protobuf 3.6.0,最后重新编译Caffe。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

错误提示

I0307 11:46:13.909721 30298 layer_factory.hpp:77] Creating layer data
[libprotobuf FATAL google/protobuf/stubs/common.cc:67] This program requires version 3.6.0 of the Protocol Buffer runtime library, but the installed version is 3.0.0. Please update your library. If you compiled the program yourself, make sure that your headers are from the same version of Protocol Buffers as your link-time library. (Version verification failed in “google/protobuf/descriptor.pb.cc”.)
terminate called after throwing an instance of ‘google::protobuf::FatalException’
what(): This program requires version 3.6.0 of the Protocol Buffer runtime library, but the installed version is 3.0.0. Please update your library. If you compiled the program yourself, make sure that your headers are from the same version of Protocol Buffers as your link-time library. (Version verification failed in “google/protobuf/descriptor.pb.cc”.)
*** Aborted at 1551930374 (unix time) try “date -d @1551930374” if you are using GNU date ***

问题分析

系统环境
1.使用的系统是ubuntu18.04
2.在安装caffe时,利用命令sudo apt-get install libprotobuf-dev protobuf-compiler安装了protobuf,安装的版本是3.0.0;
3.python版本3.6
问题的出现
在使用caffe里的python layer时出现上述问题;
分析
python里的protobuf是3.6版本的,解决方法,更新protobuf的版本;
解决步骤:
1.sudo apt-get remove libprotobuf-dev protobuf-compiler
2.sudo apt-get autoremove --purge
3.下载protbuf3.6版本进行编译安装
4.重新编译安装caffe

### 如何在QT项目中集成和使用Protobuf #### 添加 Protobuf 到 QT 项目 为了在 Qt 中成功集成并使用 Protocol Buffers (Protobuf),可以按照以下方法操作: 1. **下载 Protobuf 源码** 需要先从官方仓库或其他可信资源获取最新版本的 Protobuf 源码[^2]。确保所使用的版本兼容当前项目的开发环境。 2. **通过 CMake 构建工具生成 VS 工程或 Makefile 文件** 使用 `cmake` 命令来配置构建系统,这一步骤能够生成适合本地系统的编译脚本(如 Visual Studio 的解决方案文件或者 Linux 下的 Makefile)。具体命令如下: ```bash cmake -G "Visual Studio 16 2019" .. ``` 如果是在 Windows 平台下工作,则推荐指定目标 IDE 版本;如果是基于 Unix 或 macOS 开发,则无需额外参数即可完成默认设置[^3]。 3. **编译生成必要的库文件与 protoc 可执行程序** 完成前一阶段后,在支持的环境中实际运行编译器处理这些生成物。对于 Microsoft Visual Studio 用户来说意味着打开刚刚创建出来的 .sln 解决方案并按常规方式建立 Release/Debug 版本下的产物集合——其中包括但不限于 libprotobuf.a/.so 和用于解析定义描述符的语言无关转换器 `protoc.exe` 自身[^2]。 4. **编写自定义 `.proto` 文件** 创建一个新的文本文档命名为类似于 `person.proto` ,其中明确定义消息结构及其字段属性等内容。例如下面展示了一个简单的例子: ```proto syntax = "proto3"; message Person { string name = 1; int32 id = 2; repeated string email = 3; } ``` 5. **利用 protoc 转换为对应语言的具体实现代码** 执行之前准备完毕后的协议缓冲区编译器应用程序,并附加适当选项指向输入路径连同输出目录一起传递给它作为参数列表的一部分。这样就可以得到针对特定编程语境优化过的类声明形式了。 ```bash protoc --cpp_out=./generated ./path/to/person.proto ``` 6. **将生成的结果纳入到现有工程项目之中** 把由上述指令产出的一系列头文件(.h)以及源文件(.cc)复制粘贴至合适位置处之后调整 qmake/pro 文件使得链接期间能正确找到依赖关系项。另外记得同步添加外部静态/动态连接库地址以便顺利完成最终组装环节[^3]。 7. **测试验证功能正常运作情况** 设计若干单元测验案例用来确认整个流程无误地实现了预期目的即可以通过序列化反序列化的手段交换复杂对象实例之间携带的信息量而不会丢失任何细节部分[^1]。 ```python from google.protobuf import json_format def serialize_person(person_obj): return person_obj.SerializeToString() def deserialize_person(serialized_data): person_instance = Person() # Assuming 'Person' is defined as per your proto file. person_instance.ParseFromString(serialized_data) return person_instance if __name__ == "__main__": sample_json = '{"name": "John Doe", "id": 1234, "email": ["john@example.com"]}' person_from_json = json_format.Parse(sample_json, Person()) serialized_form = serialize_person(person_from_json) restored_person = deserialize_person(serialized_form) assert restored_person.name == "John Doe" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值