java grpc 测试_编译gRPC(windows)和测试demo-Go语言中文社区

本文详细介绍了在Windows上使用Visual Studio 2015编译gRPC及其依赖,并生成C++的helloworld示例。内容包括获取gRPC源码、编译protobuf、解决编译警告和错误,以及创建和配置C++项目的过程。
摘要由CSDN通过智能技术生成

准备工作:

1.编译器:Visual studio 2015(到微软官网下载,这里可能有人会问“为什么不用VS2013,因为gRPC源码是用gcc编译的,vs2013编译器编译会有很多问题,但是vs2015编译器已经可以编译gcc编译的代码”)

获取gRPC源代码

gRPC是开源框架,项目代码在github上,所以首先要安装git。

git安装后,在指定文件夹中(默认打开为当前用户所在的文件夹,比如Administrator就到目录"C:UsersAdministrator"),执行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。(详细编译见:grpcthird_partyprotobufcmakeREADME.md)

需要git,cmake支持

cmd打开vs命令行工具(Windows Desktop Command Prompts/VS2015 x64 x86 兼容工具命令提示符)

cd 到grpc目录

cd protobuf

cd gmock

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      ../..

打开grpcthird_partyprotobufcmakebuildsolution下protobuf.sln

编译成功

生成文件:

protoc.exe

libprotobuf.lib

libprotoc.lib

后续有用到

将编译好的Debug,Release文件夹拷贝到grpcthird_partyprotobufcmake目录下(Debug下面的lib文件后边的d需要去掉)

注意:如果需要将库编译成32位版本,需要将项目属性参数改为win32,还需要改一处地方,如下图:

1d2671c2943e7b9d833fc89d2185bb04.png

vs工程调试

用vs2015打开vsprojects/grpc.sln(grpc项目是需要依赖openssl库和zlib库,这两个库是通过NetGet从网络上实时获取的,所以打开工程的时候需要等待)

生成文件:gpr.lib    gprc.lib grpc++.lib

注意:我下载的grpc源码在编译 grpc++.lib库文件的时候发现错误“error C2220: 警告被视为错误 - 没有生成“object”文件”。

解决方法:右击选择属性->配置属性->c/c++->常规,将“警告视为错误”的选项改为“否”。

完成:可以编译

打开grpcvsprojectsgrpc_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

(详细见:grpcexamplesprotoshelloworld.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 greetings

message 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.proto

protoc.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++项目

依照grpcexamplescpphelloworld下client,server例子

greeter_async_client.cc

greeter_async_client2.cc

greeter_async_server.cc

greeter_client.cc

greeter_server.cc

4. 设置头文件

将刚刚生成的文件放入工程源代码目录$(SolutionDir)并包含进工程

GrpcTestGrpcTestsrcprotobuf

将:grpcinclude,grpcthird_partyprotobufsrc中的文件拷贝到include目录(自己的库目录)

三个头文件目录,一个是刚生成的的访问类路径,一个是gRPC的头文件,一个是protobuf的头文件.

5. 设置库

将:

grpcthird_partyprotobufcmakeRelease;

grpcvsprojectsRelease;

放入lib目录(自己的lib库目录)

总共拷贝到 lib 目录下的库文件有:gpr.lib  grpc.lib  grpc++.lib  libprotobuf.lib

工程还需要依赖 zlib库 openssl库,这两个库是通过Neget从网上实时获取的(只要搜索 grpc.dependencies.openssl 就能到Neget上找到,点击安装(我是用的v1.0.204.1版本))

具体如何设置还可以参考本文后面给出的参考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)

我使用的

greeter_client.cc

greeter_server.cc

两个测试来做的测试

说明:

















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值