当前位置:   article > 正文

protobuf配置过程_visual studio 2022配置protobuf

visual studio 2022配置protobuf

一、配置过程

vs2022 第一次下载cmake 3.17 x64.msi , 发现没有vs2022选项。

第二次下载最新版本cmake 3.27 x64.msi , 发现不兼容vs2022 , 会闪退;

第三次下载了倒数第二新的版本cmake 3.26 x64.msi , 这次完美generate

二、protobuf

三、UML类图

1、根据类图开发

2、笔试 - 根据代码画出类图

四、语法

person.proto

  1. syntax = "proto3";
  2. message person
  3. {
  4. int32 sid = 1; //编号从1开始
  5. string name = 2; //有中文用bytes,没中文用string就够
  6. string sex = 3;
  7. int32 age = 4;
  8. }

生成了两个文件:
person.pb.cc
person.pb.h

在 person.proto 文件中,我们使用了 Protocol Buffers 的版本 proto3。在这个文件中定义了一个名为 person 的消息类型。

person 消息类型包含以下字段:

  • sid 是一个整数类型的字段,字段标签为 1,用于表示编号,编号从1开始。
  • name 是一个字符串类型的字段,字段标签为 2,用于表示姓名。
  • sex 是一个字符串类型的字段,字段标签为 3,用于表示性别。
  • age 是一个整数类型的字段,字段标签为 4,用于表示年龄。

根据这个 person.proto 文件,通过使用 Protocol Buffers 的编译器 protoc,我们生成了两个文件:person.pb.cc 和 person.pb.h

这两个文件是根据 person.proto 中定义的消息类型自动生成的,这两个文件里的内容是:用于序列化和反序列化 person 消息的代码。通过使用这些生成的文件,我们可以在应用程序中使用 person 消息类型进行数据的打包和解包。

指定头文件

 

无法解析的外部命令、无法定义的引用 ------>  只有头文件,却缺少动态库

 

protobuf数组

 
    /*
    * 在proto文件中  加repeated变为数组
    * 数组:申请一块内存,存储名字
    * p.add_name();
    * p.set_name(0,"小豪");
    * 
    * p.add_name();
    * p.set_name(1,"小王");
    * 
    * p.add_name();
    * p.set_name(2,"小吴");   其他sex、age等不变 ,
    打印的时候:p2.name(0) p2.name(1) p2.name(2)
    */

 

protobuf枚举 
  1. syntax = "proto3";
  2. // 定义枚举
  3. enum Color
  4. {
  5. Red = 0; // protbuf中,第一个枚举值必须为0
  6. Green = 6;
  7. Blue = 9;
  8. }
  9. message Persion
  10. {
  11. int32 id = 1; // 编号从1开始
  12. bytes name = 2;
  13. string sex = 3;
  14. int32 age = 4;
  15. Color color = 5; // 定义枚举变量
  16. }
  17. //测试:重新生成.h,.cc 、 替换 、运行测试
  18. p.set_color(Blue);
  19. cout << ",color:" << p2.color(); //,color:9
 message中可以嵌套message
  1. message Persion
  2. {
  3. int32 id = 1; // 编号从1开始
  4. bytes name = 2;
  5. string sex = 3;
  6. int32 age = 4;
  7. Color color = 5; // 定义枚举变量
  8. }
  9. message Persion1
  10. {
  11. int32 id = 1; // 编号从1开始
  12. bytes name = 2;
  13. string sex = 3;
  14. int32 age = 4;
  15. Color color = 5; // 定义枚举变量
  16. Person p = 6;
  17. }
 proto导入文件
  1. // Persion.proto
  2. syntax = "proto3";
  3. // 导入另外一个proto文件
  4. import "Info.proto";
  5. enum Color
  6. {
  7. Red = 0; // protbuf中第一个枚举值必须为0
  8. Green = 6;
  9. Blue = 9;
  10. }
  11. message Persion
  12. {
  13. int32 id = 1; // 编号从1开始
  14. repeated bytes name = 2;
  15. string sex = 3;
  16. int32 age = 4;
  17. Color color = 5;
  18. Info info = 6; // Info对象, 导入的proto文件中的类
  19. }
  1. // Info.proto
  2. syntax = "proto3";
  3. message Info
  4. {
  5. bytes address = 1; // 地址
  6. int32 number = 2; // 门牌号
  7. }

        

D:\BaiduNetdiskDownload\linux黑马32期资料\钻石课程\第5阶段-跨平台企业项目实战\day03 - 序列化-protobuf使用\01-教学资料>protoc ./person.proto --cpp_out=./

D:\BaiduNetdiskDownload\linux黑马32期资料\钻石课程\第5阶段-跨平台企业项目实战\day03 - 序列化-protobuf使用\01-教学资料>protoc ./Info.proto --cpp_out=./

 c++

  1. p.set_color(Blue);
  2. Info* info = p.mutable_info();
  3. info->set_address("北京昌平区tdb大厦");
  4. info->set_id(911);
  5. Info li = pp.info();
  6. cout << ",address:" << li.address()
  7. << ",number:" << li.number() << endl;
包 (即c++中的命名空间)

命名空间  解决的是 两个不同文件同名类的问题(两个人分别写了一个文件,但是都文件中的message变量名相同。)
 

  1. ```protobuf
  2. // Persion.proto
  3. syntax = "proto3";
  4. // 导入另外一个proto文件
  5. import "Info.proto";
  6. // 添加命名空间
  7. package itcast; // Persion类属于itcast这个命名空间
  8. enum Color
  9. {
  10. Red = 0; // protbuf中第一个枚举值必须为0
  11. Green = 6;
  12. Blue = 9;
  13. }
  14. message Persion
  15. {
  16. int32 id = 1; // 编号从1开始
  17. repeated bytes name = 2;
  18. string sex = 3;
  19. int32 age = 4;
  20. Color color = 5;
  21. // 命名空间.类名
  22. itheima.Info info = 6; // Info对象, 导入的proto文件中的类
  23. }
  24. ```
  25. ```protobuf
  26. // Info.proto
  27. syntax = "proto3";
  28. // Persion类属于itheima这个命名空间
  29. package itheima;
  30. message Persion
  31. {
  32. bytes address = 1; // 地址
  33. int32 number = 2; // 门牌号
  34. }
  35. ```

五、debug和realease的区别

release打断点,程序不会停

release是发布版本时,才用到。

在软件开发中,"Debug" 和 "Release" 是两种常见的构建配置或构建模式,它们之间有一些区别。

  1. Debug 模式:

    • Debug 模式旨在帮助开发人员进行调试和测试。
    • 在 Debug 模式下,编译器会生成包含调试信息的二进制文件,这些信息可以用于调试器在运行时跟踪程序的执行。
    • Debug 模式通常会禁用某些优化,以便在调试过程中更容易观察和分析代码的执行过程。
    • Debug 模式可能会包含额外的运行时检查和错误检测机制,以帮助发现和修复潜在的问题。
  2. Release 模式:

    • Release 模式旨在生成用于最终部署或发布的优化代码。
    • 在 Release 模式下,编译器会对代码进行更多的优化,以提高执行效率和减小生成的二进制文件的大小。
    • Release 模式通常会禁用或减少调试信息的生成,以减小可执行文件的大小。
    • Release 模式更注重性能和效率,而不是为了方便调试和开发。

综上所述,Debug 模式适用于开发和调试阶段,它提供了更多的调试信息和辅助工具,但可能会牺牲一些性能。而 Release 模式适用于最终部署或发布阶段,它会进行更多的优化以提高性能,同时减少了调试信息的生成。

在实际开发中,通常会根据需要在 Debug 模式和 Release 模式之间进行切换。在开发和测试阶段使用 Debug 模式,以便更方便地调试和分析代码。而在发布或部署阶段,使用 Release 模式以获得更好的性能和较小的文件大小。

请注意,不同的开发环境和编程语言可能会有不同的方式来配置和使用 Debug 和 Release 模式。具体的配置方式和设置取决于你使用的开发工具和平台。

六、报错的解决办法

vs2022使用protobuf报错总结_编程小老弟的博客-CSDN博客

后续

遇到了报错一直解决不掉,先暂停吧。。。唉

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/907203
推荐阅读
相关标签
  

闽ICP备14008679号