VS2015 Protobuf环境配置

VS2015 Protobuf环境配置

想通过某种方式由c++后台给c#前台传数据,Pinvoke不能操作太复杂的数据结构,因此想尝试一下protobuf。但是在搭建环境的时候就费了不少劲,说难不难就是看到的资料都过了蛮久不太好用。因此记录一下成功搭建的过程,以及遇到的一些错误的解决方法。

下载protobuf

下载链接: https://github.com/protocolbuffers/protobuf/tags. 我下载的是v3.12.0,偏最新的,操作起来应该差不多。接下来准备好cmake工具进行cmake。

下载cmake

Cmake的官网下载链接在外网,下起来剧费劲一直失败,搜到的国内链接还都是csdn需要付费的。不懂就问,还好我朋友早就发现了一个巨好用的渠道,下载贼快,链接: https://pc.qq.com/search.html#!keyword=cmake. 再次感叹企鹅粑粑的伟大。

cmake编译

安装好cmake之后,在下载的protobuf根目录下创建一个新目录build。运行cmake,选择好Source目录为根目录下cmake文件夹,Build目录就是刚才新建的目录。选好后点击左下方的Configure。会弹出一个选项应该是选择生成文件形式吧,我选的是VS2015。成功Configure之后如下,勾选项默认就好,点击Generate等待完成。
在这里插入图片描述
生成后的文件都在build目录下。

编译生成proto.exe

打开build目录找到cmake后得到的解决方案,打开直接编译即可。这一步我没有遇到报错。不过要注意编译时候模式选择的是Release还是Debug,这个会对最后根据协议生成的项目文件的使用产生影响,可能会出现一些配置不匹配的报错。这个后面会说明。这里编译就行。会根据编译模式的选择生成相应的Release或Debug文件夹。
在这里插入图片描述

Protobuf的使用

下面来配置protobuf。

  1. 首先根据协议写个例子。这里参考了一蓑烟雨1989. 并稍作修改。不然之后编译的时候会出现[libprotobuf WARNING protobuf-cpp-3.12.0\protobuf-3.12.0\src\google\protobuf\compiler\parser.cc:648] No syntax specified for the proto file: person.proto. Please use ‘syntax = “proto2”;’ or ‘syntax = “proto3”;’ to specify a syntax version. (Defaulted to proto2 syntax.) 这样的警告。虽然感觉就算警告也无伤大雅。
  2. 在根目录下examples文件夹下,新建一个文本文件,改名为person.proto,粘贴如下例子。
syntax = "proto2";

package tutorial;  

message Person {  
  required string name = 1;  
  required int32 age = 2;  
  optional string email = 3;  
}  
  1. 打开cmd 进入到刚刚编译结束后的生成目录下,我的是Release目录。输入如下指令,之后会在examples目录内看到protobuf编译生成的person.pb.cc和person.pb.h两个文件,也就是之后将要添加到项目里的文件。
protoc -I=..\..\examples --cpp_out=..\..\examples ..\..\examples\person.proto

VS2015环境配置

  1. 新建一个c++空项目工程。将person.pb.cc和person.pb.h两个文件导入进项目内。
  2. 然后就是包含目录、库目录、链接库的常规配置。
    打开属性,选择VC++目录
    a.包含目录,导入protobuf-3.12.0\src所在路径,再分别导入protobuf-3.12.0\third_party\googletest下googlemock和googletest两个目录下的include目录。
    b.库目录,导入编译protobuf生成的Debug或Release生成目录
    c.选择链接器->附加依赖项,添加libprotobuf.lib和libprotoc.lib。
  3. 用如下测试代码编译测试,也是参考了一蓑烟雨1989。编译模式和cpu一定要和当时编译protobuf.sln保持一致,否则链接的库文件会因为不匹配而报错。
#include <iostream>  
#include "person.pb.h"  

#pragma comment(lib, "libprotobuf.lib")  
#pragma comment(lib, "libprotoc.lib")

using namespace std;
using namespace tutorial;

int main()
{
  Person person;

  person.set_name("wangshubo");
  person.set_age(26);
  person.set_email("wangshubo1989@126.com");

  cout << person.name() << endl;
  cout << person.age() << endl;
  cout << person.email() << endl;

  system("pause");
  return 0;
}

一些报错处理

如果编译失败报错error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MT_StaticRelease”不匹配值“MD_DynamicRelease”,在工程上右键->属性->c/c+±>代码生成->运行库
改成(release为MT,debug为MTD)即可解决。参考https://blog.csdn.net/u013157963/article/details/51689616?utm_source=blogxgwz2

如果编译报错如导入的pb.cc和pb.h文件中一些类函数找不到,则检查在修改编译模式之后是否重新设置包含目录等属性配置。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
配置protobuf环境的步骤如下: 1. 首先,建议将protobuf安装到/usr/local目录下。可以执行以下命令进行配置:configure --prefix=/usr/local/protobuf。 2. 然后,编译和安装protobuf库文件。可以使用以下命令:make && make install。这将编译protobuf并将其安装到指定的目录。 3. 在编译和链接你的代码时,需要指定头文件和库文件的位置。对于头文件的位置,可以使用-I选项指定路径,例如:-I /usr/local/protobuf/include。对于库文件的位置,可以使用-L选项指定路径,例如:-L /usr/local/protobuf/lib。 4. 在你的代码中,需要包含protobuf的头文件。对于生成的example.pb.h文件,它包含了对ptype::person的定义。你可以在代码中包含该头文件,以便使用相关的protobuf对象和函数。 5. 如果需要将protobuf对象序列化到文件流中,可以使用SerializeToOstream函数。该函数将对象序列化后写入fstream流中。 总结一下,配置protobuf环境包括将protobuf安装到/usr/local目录下,编译和安装protobuf库文件,指定头文件和库文件的位置,在代码中包含protobuf的头文件,使用相关的protobuf对象和函数。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [protobuf配置与使用](https://blog.csdn.net/djpmsoa95092/article/details/101763281)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值