gRPC官方Windows安裝說明:
- Install Visual Studio 2015 or 2017 (Visual C++ compiler will be used).
- Install Git.
- Install CMake.
- Install Active State Perl (
choco install activeperl
) - required by boringssl - Install Go (
choco install golang
) - required by boringssl - Install yasm and add it to
PATH
(choco install yasm
) - required by boringssl - (Optional) Install Ninja (
choco install ninja
)
在Windows上源碼編譯安裝gRPC還是很麻煩的需要MSVC編譯器、git、cmake、Perl、go、yasm、Ninja等工具,一些工具的安裝可以使用choco(Windows上的包管理工具)來安裝。
准備環境
https://git-scm.com/上下載git,當前版本2.23.0。
https://cmake.org/download/上下載cmake,下載cmake-3.15.3-win64-x64.zip,解壓后方式何時位置,將cmake工具所在bin目錄加入到系統環境變量Path。
安裝Perl、go、yasm等
使用choco安裝activeperl在我的電腦上很慢,慢的很,直接在官網下載又需要注冊登陸用戶,也很麻煩,最后直接在第三方網站下載,直接來安裝!
下載gRPC源碼
新建一個文件夾,命名為grpc_plugs,右擊空白處選擇Git Bash Here
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