gRPC官方Windows安裝說明:git
choco install activeperl
) - required by boringsslchoco install golang
) - required by boringsslPATH
(choco install yasm
) - required by boringsslchoco install ninja
)在Windows上源碼編譯安裝gRPC仍是很麻煩的須要MSVC編譯器、git、cmake、Perl、go、yasm、Ninja等工具,一些工具的安裝能夠使用choco(Windows上的包管理工具)來安裝。github
準備環境golang
https://git-scm.com/上下載git,當前版本2.23.0。函數
https://cmake.org/download/上下載cmake,下載cmake-3.15.3-win64-x64.zip,解壓後方式什麼時候位置,將cmake工具所在bin目錄加入到系統環境變量Path。工具
安裝choco網站
安裝Perl、go、yasm等ui
使用choco安裝activeperl在個人電腦上很慢,慢的很,直接在官網下載又須要註冊登錄用戶,也很麻煩,最後直接在第三方網站下載,直接來安裝!spa
下載gRPC源碼.net
新建一個文件夾,命名爲grpc_plugs,右擊空白處選擇Git Bash Here3d
git clone https://github.com/grpc/grpc.git
cd grpc 進入grpc文件夾,checkout當前較新版本
git checkout v1.23.0
查看當前版本
git branch -v
下載依賴
git submodule update --init
執行操做須要聯網下來,請耐心等待…
下載完畢後,找到並打開文件./grpc/third_party/zlib/gzguts.h找到
#ifdef _WIN32
#inlcude <stddef.h>
#endif
改成
#ifdef _WIN32
#include <stddef.h>
#pragma warning(disable:4996)
#endif
屏蔽一些警告,感受沒啥實際做用,只是照着作而已。
VS2017 編譯gRPC源碼
mkdir .build
cd .build
cmake –version
cmake .. -G "Visual Studio 15 2017 Win64" -DCMAKE_BUILD_TYPE=Release
配置makefile,過程比較長,期間沒有出現error啥的就沒啥問題,會生成grpc.sln。
cmake --build .
上述命令執行VS2017編譯操做,和直接打開grpc.sln執行編譯同樣的效果。
耐心等待編譯完成…
編譯完成後生成gRPC以及第三方依賴庫的lib靜態庫文件,見下圖所示:
HelloWorld
gRPC自帶的C++ HelloWorld 例子位於.\grpc\examples\cpp\helloworld
在VS2017中新建空的C++工程gRPCTest
將helloworld.proto拷貝到工程目錄下
將生成的protoc.exe拷貝到工程目錄下
工程目錄下運行cmd執行protoc編譯命令生成生成源代碼文件helloworld.pb.h,helloworld.pb.cpp,helloworld.grpc.pb.h,helloworld.grpc.pb.cpp。
protoc -I="./protos" --grpc_out="./protos" --plugin=protoc-gen-grpc=「E:\LearningOpensourceLib\gRPC\grpc_plugs\grpc\.build\Debug\grpc_cpp_plugin.exe " "./protos\hw.proto"
protoc -I="./protos" --cpp_out="./protos" "./protos\hw.proto"
拷貝grpc_cpp_plugin.exe,greeter_client.cc,greeter_server.cc至工程目錄下
將文件都添加至工程中去,最終的工程結構以下:
選擇Debug – x64構建配置
配置include目錄以及lib目錄和lib導入:我這裏直接添加的絕對路徑
須要配置預處理器定義_WIN32_WINNT=0x0A00,不然會報「Please compile grpc with _WIN32_WINNT of at least 0x600 (aka Windows Vista)」的錯誤。
客戶端代碼新增std::cin.get()避免窗口一閃而退:
服務端代碼:
編譯服務端時,請屏蔽掉客戶端的main函數代碼
編譯客戶端時,請屏蔽掉服務端的main函數代碼
生成exe文件更名,並將zlibd.dll放在一塊兒
分別運行grpc-server.exe和grpc-client.exe