打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
protobuf如何用proto文件导出C++代码文件及链接protobuf静态库问题

【一】.如何用.proto文件导出C++代码

之前把protobuf编好了,迫不及待写个小程序试一下

当protobuf编译安装完成后,就可以在命令行下任何目录输入命令:

  1. protoc proto文件路径 --cpp_out=C++代码文件导出目录  

在使用中我发现有一点需要注意,就是--cpp_out的目录是根据proto文件的路径为基础的,也就是说:假设proto文件位于src目录下,希望将C++代码也导出到src目录下,那么--cpp_out直接=.就可以了。不需要再写一遍src/,如果写了src/,那么代码导出的目录将是src/src/(即使src/src不存在,也会被创建)

注意:

1.proto文件路径要有文件名,而--cpp_out路径不能有文件名,只能是路径

例如,.proto当前目录下,想把C++代码也生成到当前目录下,应该如下调用protoc:

  1. protoc xxxx.proto --cpp_out=.  

2.最好是cd到proto文件所在的目录再导出,否则会出现生成出来的文件找不到头文件的问题

protobuf生成C++代码时会在同一个目录下生成两个文件,一个.cc一个.h,生成的.cpp文件会include生成的.h文件,而如果不cd到proto文件所在目录去操作,那就可能会出现.cc文件包含.h文件时路径错误

例如:.proto文件在src目录下,导出代码也导出到src目录下,可能执行如下命令

  1. protoc src/xxxx.proto --cpp_out=.  
不出所料,src目录下确实出现了生成的.cc和.h文件,但是一编译,就会报错了

原因是找不到头文件"src/xxxx.pb.h",原来,protobuf把执行命令时proto文件所在目录的路径也加到生成的代码中了。

所以要想避免这个问题,就cd到protobuf所在的目录再去操作。例如上例的解决办法就是

cd src

  1. protoc xxxx.proto --cpp_out=.  

这样一来,再编译,就不会有任何问题了


【二】.链接protobuf的静态库

如果只将protoc生成的代码头文件和代码文件加入工程,在链接阶段会报错,错误内容大致就是未定义的方法XXXXX云云,一看就是没有包含protobuf的静态库,但我在protobuf的目录下找了半天也没找到静态库在生成到哪了。

后来突然想到在之前的一篇文章中说到过protobuf是将lib安装到/usr/local/lib下了,而这个目录应该是默认包含目录之一(不一定是,取决于OS及版本),所以不需要设置链接路径,只需直接在Makefile/CMakeLists.txt中链接库“protobuf”即可编译通过。如果问题依旧,那可能是/usr/local/lib没有被加入到默认的包含环境,解决方法在这篇文章也有讲到

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
hello [Protocol Buffer] world
google protobuf学习笔记一:windows下环境配置
Windows系统下使用protobuf:protobuf的简介、安装、使用方法之详细攻略
将xls转成protobuf供Unity使用的流程
Java protobuf框架使用向导
gRPC学习之五:gRPC-Gateway实战
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服