我是靠谱客的博主 深情寒风,最近开发中收集的这篇文章主要介绍windows编译java_gRPC Windows编译应用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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%29grpcinclude

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

依赖库的路径:C:Program Files %28x86%29grpclib

依赖的库有: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:bingrpc_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类型

转载至链接:https://my.oschina.net/shelllife/blog/1832552

最后

以上就是深情寒风为你收集整理的windows编译java_gRPC Windows编译应用的全部内容,希望文章能够帮你解决windows编译java_gRPC Windows编译应用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部