gRPC是开源框架,项目代码在github上,因此首先要安装github。
github安装后,在指定文件夹中,执行Git命令就能够获取gRPC的全部源码。java
https://github.com/grpc/grpcgit clone
虽然在github的gRPC主页上提供了源代码打包下载,可是gRPC的依赖组件就没法自动获取了。node
正如全部的项目同样,gRPC也是须要依赖第三方库。因为在gRPC中已经经过git的.gitmodules
文件定义了依赖组件,因此只需执行git命令就能够自动获取全部的依赖组件。python
cd grpc
git submodule update --init
用vs2015打开c++
vsprojects/grpc.slngit
1,删除工程boringsslgithub
2,在\grpc\third_party\zlib\gzguts.hruby
中将服务器
完成:能够编译框架
说明:NuGet有还原库,须要等待完成async
gRPC依赖protobuffer进行消息编码,所以须要依赖protobuffer。(详细见:grpc\third_party\protobuf\cmake\README.md)
须要git,cmake支持
cmd打开vs命令行工具(Windows Desktop Command Prompts/VS2015 x64 x86 兼容工具命令提示符)cd 到grpc目录
后续有用到
将编译好的Debug,Release文件夹拷贝到grpc\third_party\protobuf\cmake\目录下(Debug下面的lib文件后边的d须要去掉)
打开grpc\vsprojects\grpc_protoc_plugins.sln编译生成可执行文件
完成
生成文件:
grpc_cpp_plugin.exe
grpc_csharp_plugin.exe
grpc_node_plugin.exe
grpc_objective_c_plugin.exe
grpc_python_plugin.exe
grpc_ruby_plugin.exe
syntax = "proto3"; option java_multiple_files = true; option java_package = "io.grpc.examples.helloworld"; option java_outer_classname = "HelloWorldProto"; option objc_class_prefix = "HLW"; package helloworld; // The greeting service definition. service Greeter { // Sends a greeting rpc SayHello (HelloRequest) returns (HelloReply) {} } // The request message containing the user's name. message HelloRequest { string name = 1; } // The response message containing the greetings message HelloReply { string message = 1; }
将proto.exe、helloworld.proto、grpc_cpp_plugin.exe拷贝到一个文件夹中,grpc_cpp_plugin.exe是gRPC的protoc插件,生成方法参考上文。
建立一个bat文件,包含如下命令:
protoc.exe -I=. --grpc_out=. --plugin=protoc-gen-grpc=.\grpc_cpp_plugin.exe helloworld.proto protoc.exe -I=. --cpp_out=. helloworld.proto
生成了两套文件
hellowworld.pb.h 声明生成的消息类的头文件 hellowworld.pb.cc 包含消息类的实现 hellowworld.grpc.pb.h 声明你生成的服务类的头文件 hellowworld.grpc.pb.cc 包含服务类的实现
其中前两个是protoc生成的,后两个是插件生成的。
这些包括:
详细见:https://doc.oschina.net/grpc?t=57966
grpc\third_party\protobuf\cmake\Release;
grpc\vsprojects\Release;
grpc\third_party\zlib\solution\Release;
grpc\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\lib\v120\Win32\Release\static
放入lib目录(本身的lib库目录)
四个库文件路径:protobuf库路径、grpc库路径、zlib库路径、openssl库路径。
没有使用boringssl,openssl的库是从NuGet下载的package中找到的。
库文件
libprotobuf.lib; grpc.lib; gpr.lib; grpc++.lib; Ws2_32.lib;
将gRPC的C++ example的代码拷贝到咱们刚建立的项目中,编译,出现一些error:
error C1189: #error :"Please compile grpc with _WIN32_WINNT of at least 0x600 (aka Windows Vista)"port_platform.h 59 Server_Cpp
解决:在项目属性中的Preprocessor Definitions
中添加_WIN32_WINNT=0x600
error C4996: 'std::_Copy_impl': Function call with parameters that may be unsafe - this call relies on the caller to check ****
解决:在项目属性中的Preprocessor Definitions中添加
_SCL_SECURE_NO_WARNINGS _CRT_SECURE_NO_WARNINGS
error LNK2038: mismatch detected for 'RuntimeLibrary': value
解决:只须要主程序和静态库都采用同一种Runtime Libray编译便可。
在项目属性C/C++中的 代码生成 的 运行库 选择 Multi-threaded(/MT)
OpenSSl我是添加的NuGet库来解决的
点击项目右键=>管理NuGet程序包
点击浏览=>输入grpc.dependencies.openssl
找到grpc.dependencies.openssl =>点击安装(我是用的v1.0.204.1版本)
完成,
编辑经过
依照
c++生成helloworld服务器程序
流程,
说明:
附上一个编译好的版本,里面带了测试程序(helloworld)
http://download.csdn.NET/detail/xie1xiao1jun/9630779