本教程使用的系统是64位的win10系统,IDE用的是Visual Studio 2017 Enterprise
一、代码和工具下载
1.Protocol Buffers v3.8.0:
https://github.com/protocolbuffers/protobuf/releases/tag/v3.8.0
这里我们编译的是C++版本,所以只需要 protobuf-cpp-3.8.0.zip 即可
图1
2.CMake v3.14.5:
https://cmake.org/download/
这里我们使用最新的64位版本 cmake-3.14.5-win64-x64.msi,下载完后直接安装即可
图2
二、生成protobuf的vs工程文件
1. 新建protobuf目录
用来存放下载好的代码和软件,整个目录结构最好是全英文的。
E:protobuf
将 protobuf-cpp-3.8.0.zip 直接解压到这个目录下
E:protobufprotobuf-3.8.0E:protobufprotobuf-3.8.0src 这里是C++部分
这个目录里面就是protobuf的源代码
2. 新建protobuf_build_2017_x64目录
用来存放 protobuf 的 visual studio 工程文件
E:protobufprotobuf_build_2017_x64
图3
3. CMake 生成 protobuf 的 vs 工程文件
- 打开CMake软件
- 在“Where is the source code” 项后填入 E:protobufprotobuf-3.8.0cmake
- 在“Where to build the binaries” 项后填入 E:protobufprotobuf_build_2017_x64
图4
- 点击Configure 按钮,打开界面
图5
- 在“Specify the generator for this project” 选项中选择“Visual Studio 15 2017”
- 在“Optional platform for generator” 选项中选择“x64”
- 在“Optional toolset to use” 这个选项上不填为空
- 选择“Use Default native compilers”
- 点击 Finish 按钮
图6
- 如上图所示,可能会出现警告信息,但是只要没有error信息就可以,出现“Configuring done”表示配置成功
- 点击Generate按钮,出现“Generating done”表示工程文件生成成功。
- 然后点击Open Project按钮即可打开 protobuf.sln 工程
图7
三、protobuf工程编译
图8
从上图可以看到protobuf包含了很多工程,我们自己用的主要就是libprotobuf、libprotoc和protoc这三个,你可以只编译这三个,也可以全部编译,还可以选择Debug和Release版本。
Debug版本结果:
图9
Release版本文件:
图10
可以看到Debug版本和Release版本的文件名是不同的。
到了这一步,protobuf的编译全部结束了,接下来说如何使用它们。
特别注意:如果你编译的是Debug版本,那么你自己的工程也得是Debug版本,否则会出错,同理如果是Release版本,那么你的工程也必须是Release版本使用。
在第五部分问题解答里,有这个问题的答案
四、protobuf的使用
- 用 VS2017 新建一个空的C++控制台项目,命名为 ProtobufTest。
- 在工程目录下新建 proto_file,lib,include 三个文件夹。如图11所示。
- 将 protobuf-3.8.0srcgoogle 这个目录拷贝到 include 目录下。
- 将第三部分生成的 Debug 版本的库文件(libprotobufd.lib,libprotocd.lib)拷贝到 lib 文件夹
- 将第三部分生成的 Debug 版本的 protoc.exe 文件拷贝到 proto_file 文件夹
- 在 proto_file 文件夹下新建 addressbook.proto 和 genmsg.bat 两个文件。如图12和图13所示。
- 执行 genmsg.bat 就会生成 addressbook.pb.h,addressbook.pb.cc 这两个文件。如图14所示
- 将这两个文件拷贝到工程所在目录,并新建main.cpp文件,如图15所示
- 接下来是最关键的几个步骤,一定要做对了。
- 右键 ProtobufTest 打开“ProtobufTest 属性页”对话框,配置选择Debug,平台选择x64,因为我们使用的是第三部分生成的Debug库文件(如果你想配置Release,那么必须使用第三部分生成的Release库文件).
- 在“C/C++”的“常规”标签页,找到“附加包含目录”,添加“include”,如图16所示。
- 在“C/C++”的“代码生成”标签页,找到“运行库”,选择“多线程调试(/MTd)”,如图17所示。这个步骤需要特别说一下,这里的选择和你编译libprotobuf这个工程的这个部分的设置一定要一致,否则会出错。如图18所示
- 在“链接器”的“常规”标签页,找到“附加库目录”,添加“lib”,如图19所示。
- 在“链接器”的“输入”标签页,找到“附加依赖项”,添加“libprotobufd.lib;libprotocd.lib;”如图20所示。
- 右键“ProtobufTest”,选择“添加”,选择“现有项”,将 addressbook.pb.h,addressbook.pb.cc,main.cpp 三个文件添加到工程中,如图21所示。
- 编辑 main.cpp 文件的内容,如图22所示。
- 如果编译成功,那么恭喜你,你已经可以成功使用protobuf了。
- 运行程序后,会生成一个person1.log文件,文件内容如图23所示。
图11
图12
图13
图14
图15
图16
图17
图18
图19
图20
图21
图22
图23