编译gRPC(windows)和测试demo
来源:互联网 发布:淘宝买家号可以开店吗 编辑:程序博客网 时间:2024/06/16 01:55
准备工作:
1.编译器:Visual studio 2015(到微软官网下载,这里可能有人会问“为什么不用VS2013,因为gRPC源码是用gcc编译的,vs2013编译器编译会有很多问题,但是vs2015编译器已经可以编译gcc编译的代码”)
2.git工具:获取gRPC源代码(下载路径:http://download.csdn.net/detail/xiaoyafang123/9917686)
3.cmake工具:将开源代码生成Windows下解决方案的工具(下载路径http://download.csdn.net/detail/xiaoyafang123/9917731)
获取gRPC源代码
gRPC是开源框架,项目代码在github上,所以首先要安装git。
git安装后,在指定文件夹中(默认打开为当前用户所在的文件夹,比如Administrator就到目录"C:\Users\Administrator"),
执行Git命令就可以获取gRPC的所有源码。
git clonehttps://github.com/grpc/grpc
如果源码获取失败,可以直接到本文后面的链接下载源码。
虽然在github的gRPC主页上提供了源代码打包下载,但是gRPC的依赖组件就无法自动获取了。
获取gRPC的依赖组件
正如所有的项目一样,gRPC也是需要依赖第三方库。由于在gRPC中已经通过git的.gitmodules
文件定义了依赖组件,所以只需执行git命令就可以自动获取所有的依赖组件。
cd grpc
git submodule update --init
(第三方库目录在third_party下面)
如果源码获取失败,可以直接到本文后面的链接下载源码。
编译protobuffer
gRPC依赖protobuffer进行消息编码,因此需要依赖protobuffer。(详细编译见:grpc\third_party\protobuf\cmake\README.md)
需要git,cmake支持
cmd打开vs命令行工具(Windows Desktop Command Prompts/VS2015 x64 x86 兼容工具命令提示符)cd 到grpc目录
cd protobuf
git clone -b release-1.7.0 https://github.com/google/googlemock.git gmock
cd gmock
git clone -b release-1.7.0 https://github.com/google/googletest.git gtest
cd ..\cmake
mkdir build & cd build
mkdir release & cd release
cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../../../../install ../..
cd ..
mkdir debug & cd debug
cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=../../../../install ../..
cd ..
mkdir solution & cd solution
cmake -G "Visual Studio 14 2015 Win64" -DCMAKE_INSTALL_PREFIX=../../../../install ../..
打开grpc\third_party\protobuf\cmake\build\solution下protobuf.sln
编译成功
后续有用到
将编译好的Debug,Release文件夹拷贝到grpc\third_party\protobuf\cmake\目录下(Debug下面的lib文件后边的d需要去掉)
注意:如果需要将库编译成32位版本,需要将项目属性参数改为win32,还需要改一处地方,如下图:
vs工程调试
用vs2015打开vsprojects/grpc.sln(grpc项目是需要依赖openssl库和zlib库,这两个库是通过NetGet从网络上实时获取的,所以打开工程的时候需要等待)
生成文件:gpr.lib gprc.lib grpc++.lib
注意:我下载的grpc源码在编译 grpc++.lib库文件的时候发现错误“error C2220: 警告被视为错误 - 没有生成“object”文件”。
解决方法:右击选择属性->配置属性->c/c++->常规,将“警告视为错误”的选项改为“否”。
完成:可以编译
打开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
c++生成helloworld服务器程序
1.定义proto
(详细见:grpc\examples\protos\helloworld.proto)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 greetingsmessage HelloReply { string message = 1;}
2. 生成访问代码
将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.protoprotoc.exe -I=. --cpp_out=. helloworld.proto
生成了两套文件
hellowworld.pb.h 声明生成的消息类的头文件hellowworld.pb.cc 包含消息类的实现hellowworld.grpc.pb.h 声明你生成的服务类的头文件hellowworld.grpc.pb.cc 包含服务类的实现
其中前两个是protoc生成的,后两个是插件生成的。
这些包括:
- 所有的填充,序列化和获取我们请求和响应消息类型的 protocol buffer 代码
- 名为 Greeter的类,包含
- 为了客户端去调用定义在 Greeter服务的远程接口类型(或者 存根 )
- 让服务器去实现的两个抽象接口,同时包括定义在 Greeter中的方法。
生成服务器端代码
3. 创建C++项目
4. 设置头文件
5. 设置库
grpc\vsprojects\Release;
放入lib目录(自己的lib库目录)
总共拷贝到 lib 目录下的库文件有:gpr.lib grpc.lib grpc++.lib libprotobuf.lib
工程还需要依赖 zlib库 openssl库,这两个库是通过Neget从网上实时获取的(只要搜索 grpc.dependencies.openssl 就能到Neget上找到,点击安装(我是用的v1.0.204.1版本))
如果不知道如何用Neget获取zlib库 openssl库,请参考链接:http://blog.csdn.net/junparadox/article/details/51086374
具体如何设置还可以参考本文后面给出的参考demo.
工程中需要链接的库文件:
libprotobuf.lib;grpc.lib;gpr.lib;grpc++.lib;Ws2_32.lib;
6. 编译C++项目
将gRPC的C++ example的代码拷贝到我们刚创建的项目中,编译,出现一些error:
错误A:
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
错误B:
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
错误C:
error LNK2038: mismatch detected for 'RuntimeLibrary': value
解决:只需要主程序和静态库都采用同一种Runtime Libray编译即可。
在项目属性C/C++中的 代码生成 的 运行库 选择 Multi-threaded(/MT)
说明:
HelloWord测试demo:http://download.csdn.net/detail/xiaoyafang123/9918678
HK预览测试demo: http://download.csdn.net/detail/xiaoyafang123/9920907
gRPC源码:http://pan.baidu.com/s/1bURNci。 密码:imz4
值得借鉴博客(系列4篇):http://www.cnblogs.com/polinzhuo/p/5329199.html
- 编译gRPC(windows)和测试demo
- gRpc的demo测试过程
- VS2015 编译和使用 gRPC
- grpc-demo
- windows下使用ndk编译grpc
- kiss rpc flatbuffer,capnp版本和grpc性能测试对比
- Windows下编译和配置Vtk Web Demo
- Grpc-java MacOS编译
- gRPC-java的编译
- windwos grpc 编译
- grpc vs2015编译
- vs2015编译使用GRPC
- grpc编译错误解决
- GRPC python编译.proto
- gRPC 源码编译安装
- Ubuntu&GRPC+Idea java demo
- vs2010编译测试ICE DEMO
- Protobuf和GRPC(一)
- 用DefaultDimension获得某成本中心的值
- RecyclerView简单使用
- 【Python】range和xrange
- scala断言专栏--入门
- 数据结构笔试题的笔记
- 编译gRPC(windows)和测试demo
- 初学JavaScript--基础知识笔记(二)
- ANDROID BUILDCONFIG.DEBUG的妙用
- ios-事件的产生和传递
- Spring4MVC json问题(406 Not Acceptable)解析
- Chrome 控制台实用指南
- 【Angular2】如何搭建Angular2的环境
- sssssssssssss
- Ueditor富编辑器做弹出或是某些情况第二次打开的时候会渲染失败