文档章节

gRPC Windows编译应用

水海云
 水海云
发布于 2018/06/20 09:15
字数 705
阅读 573
收藏 2

gRPC Windows编译

从github上clone出来后进行cmake的编译,参考上面的文档,需要注意的点:

  • 必须安装所有的依赖,包括Perl,Go,YASM,Git,CMake
  • 不要使用--recursive来递归clone,因为墙的原因会失败
  • 所以子模块的下载请使用:git submodule update --init
  • 使用cmake生成VS solution进行构建
  • 安装请在VS中生成INSTALL项目即可,默认安装到C盘的Program Files目录

Q:奇怪的是grpc.lib竟然没有安装到目录下,不知道为什么?

所以我只能手动将Release目录下的lib文件都拷贝到安装目录下了

example的使用

依赖与库

  • 需要使用grpc的include,在安装目录下有

    C:\Program Files %28x86%29\grpc\include

  • 需要使用protobuf的include,在安装目录下有

  • 依赖库的路径:C:\Program Files %28x86%29\grpc\lib

  • 依赖的库有:libprotobuf.lib;grpc++_unsecure.lib;grpc_unsecure.lib;gpr.lib;zlibstatic.lib;ws2_32.lib

    • libprotobuf.lib:必须的库
    • grpc++.lib: 使用SSL加密的库,C++需要,依赖ssl
    • grpc++_cronet.lib
    • grpc.lib:使用SSL加密的库,C核心库,依赖ssl
    • grpc_cronet.lib:
    • gpr.lib:必须的库,grpc库依赖
    • zlibstatic.lib:zlib压缩库,需要
    • ssl.lib:openssl库
    • grpc++_unsecure.lib: 不使用ssl加密的库,依赖grpc_unsecure.lib
    • grpc_unsecure.lib:不适用ssl加密的核心库

proto文件的编译

protoc --proto_path=IMPORT_PATH --cpp_out=DST_DIR --java_out=DST_DIR --python_out=DST_DIR --go_out=DST_DIR --ruby_out=DST_DIR --javanano_out=DST_DIR --objc_out=DST_DIR --csharp_out=DST_DIR path/to/file.proto
  • 编译Message C++实现
    protoc -I ./ --cpp_out=./ helloworld.proto
    
  • 编译Service/grpc C++实现: 需要使用插件grpc_cpp_plugin.exe
    protoc -I ./ --grpc_out=. --plugin=protoc-gen-grpc=C:\bin\grpc_cpp_plugin.exe helloworld.proto
    

可能出现的错误

  • "Please compile grpc with _WIN32_WINNT of at least 0x600 (aka Windows Vista)"

    需要添加编译宏:-D_WIN32_WINNT=0x600

  • error C4146: 一元负运算符应用于无符号类型,结果仍为无符号类型

    在【项目-属性-C/C++-高级】中修改【禁用特定警告】,添加 4146.

  • error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MT_StaticRelease”不匹配值“MD_DynamicRelease”(helloworld.grpc.pb.obj 中)

    只能使用在编译grpc时生成的protobuf库,不能使用不同版本的。

  • error LNK2001: 无法解析的外部符号 __imp__WSAStartup

    • 在添加头文件处,添加引用:#pragma comment(lib,"ws2_32.lib")
    • 或者在库输入中添加:ws2_32.lib的依赖
  • warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失

    这个错误会导致文件中的中文无法正常解析,从而导致中文后面的符号出现未定义符号之类的一大堆错误。

    解决方法就是将文件的编码格式改为:【Unicode(UTF-8 带签名)-代码页65001】

  • 无效字符类型传输:protobuf string只支持UTF-8和ASCII

    如果中文编码是GBK编码的话,有两种方法:

    • 转换成UTF8
    • 使用bytes类型,而不是string类型

© 著作权归作者所有

上一篇: QT5交叉编译
下一篇: Boost库编译应用
水海云
粉丝 50
博文 120
码字总数 101938
作品 0
深圳
程序员
私信 提问
mac下grpc(golang server + php client)实践

目前微服务这么流行,RPC框架也是百花齐放,本文讲述一下mac下grpc的开发环境搭建,其中server端使用golang,客户端使用php。 服务端 golang grpc安装 这里列出了一个参考,由于grpc在githu...

陈晓风
2018/07/01
0
0
前端 Web gRPC 实践和优化

Web gRPC 是 gRPC 在 Web 上的一个适配实现。关于他的介绍以及为什么要用 gRPC 就不在这解释了,如果你决定使用 Web gRPC,并且正在寻找前端的库和解决方案,看一看这篇文章,应该会有所帮助...

徐健本尊
2018/10/25
0
0
Grpc介绍 — Go-Service To PHP-Client

笔者现在公司项目大部分是PHP进行开发,要完成整体微服务化必须要考虑PHP使用上的可行性,Grpc也是支持PHP作为client端发起Grpc请求,但是依赖的扩展等都相对复杂(毕竟不是亲儿子),那么本...

喵了_个咪
03/06
276
1
gRPC 1.0 发布,来自 Google 的 RPC 框架

一直以来,构建一个高度可扩展且松耦合的系统是很困难的。来自Google的gRPC框架致力于解决这个领域问题。它自去年面世以来收到了社区的大量关注和使用。8月23日Google正式发布了gRPC的1.0版本...

局长
2016/09/06
2.4K
5
grpc| python 实战 grpc

date: 2018-5-15 22:12:32 title: grpc| python 实战 grpc description: 只要代码可以跑起来, 很多难题都会迎刃而解. so, keep coding and stay hungry. 之前用 swoole 写 server 时就接触过...

daydaygo
2018/05/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

不就是SELECT COUNT语句吗,竟然能被面试官虐的体无完肤

数据库查询相信很多人都不陌生,所有经常有人调侃程序员就是CRUD专员,这所谓的CRUD指的就是数据库的增删改查。 在数据库的增删改查操作中,使用最频繁的就是查询操作。而在所有查询操作中,...

HollisChuang
15分钟前
3
0
乐观锁和悲观锁

乐观锁和悲观锁 在并发环境下,事务的隔离性很难保证,因此会出现很多并发一致性的问题 事务的特性:原子性、一致性、隔离性、持久性 1、丢失修改:T1和T2两个事务对同一个数据进行修改,T1先...

大瑞清_liurq
23分钟前
4
0
Scrum敏捷价值观与原则

Scrum是一种迭代式增量软件开发过程,通常用于敏捷软件开发。如果还不知道Scrum敏捷开发的朋友们,请出门左转,点击 Scrum 了解。 敏捷价值观 个体和互动 高于 流程和工具 工作的软件 高于 ...

醉美閑聖
24分钟前
4
0
android焦点

final RelativeLayout relativeLayout=new RelativeLayout(context); relativeLayout.setClickable(true); relativeLayout.setFocusable(true); rel......

安卓工程师王恒
26分钟前
3
0
IP地址分配与中继设备简介

1. TCP/IP模型 TCP/IP协议是在OSI参考模型出现之间就被开发的,并广泛部署在计算机网络中。但是,后来由于概念混淆,TCP/IP模型的层次和名称往往与OSI模型的层次名称相互借用。如图1.所示。 ...

xiangyunyan
27分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部