windows端gRPC编译

准备

protobuf:

源码下载路径:https://github.com/protocolbuffers/protobuf/releases/tag/v3.6.1

libcares 库:

源码下载路径:https://c-ares.haxx.se/download/

OpenSSL:

源码下载路径:https://www.openssl.org/source/

zlib:

源码下载路径:www.zlib.net/zlib-1.2.11.tar.gz

 

编译OpenSSL

首先说明为什么OpenSSL单独编译:因为libcares和protobuf源码当中有CMake工具所需的CMakeLists.txt文件,唯独OpenSSL源码当中没有。请看gRPC中CMakeLists.txt文件中源码:

以上include会去寻找依赖库中源码的CMakeLists.txt文件,如果没有,将CMake出错。所以,我们先编译OpenSSL。

步骤如下:

(1)先安装工具perl:

(2)工具下载地址:https://www.activestate.com/activeperl/downloads

下载下来后直接安装。进入命令模式,输入perl -v 正确显示版本信息,安装成功,能找到命令。

(3)打开vs2015开发人员命令提示:

         进入到vs2015安装目录:Microsoft Visual Studio 14.0\VC\bin 目录下执行

         vcvars32.bat 命令:

         这是初始化vs编译环境。

(4)进入OpenSSL源码目录,依次执行以下命令:

         Perl Configure VC-WIN64A no-asm –prefix={ you install path }

         VC-WIN64A为windows安装版本,可供选择的版本有:VC-WIN32 | VC-WIN64A | VC-WIN64I | VC-CE,--prefix为安装路径。No-asm表示不适用汇编。

(5)执行 ms\do_ms,无错后执行 nmake –f ms\ntdll.mak

(6)Nmake –f ms\ntdll.mak test,若显示无错则说明生成库成功。

(7)Nmake –f ms\ntdll.mak install

 这些步骤执行完成之后OpenSSL库则安装成功,可以去指定的安装目录下面看是否有相应文件生成。

然后将该路径添加到环境变量中

这一步不可省略,因为后续编译gRPC时,CMake命令find_package找不到这个库。

 

编译gRPC

(1)将准备好的libcares源码放入gRPC源码third_party\cares\cares 目录下:

(2)将准备好的zlib源码放到gRPC源码hird_party\zlib目录下:

(3)将准备好的protobuf源码放到 gRPC源码third_party\protobuf目录下:

(4)打开CMake工具,配置如下图:

(5)点Confgure选择安装的vs编译器:

         出现如下界面则说明配置成功,但是ssl.cmake出现警告,gRPC_SSL_PROVIDER is "module" but BORINGSSL_ROOT_DIR is wrong Call Stack (most recent call first):是因为OpenSSL默认是gRPC的模块配置,但是它找不到OpenSSL的源码位置,所以出现警告。

(6)修改SSL编译项,修改它的值为package,这样配置就会去寻找OpenSSL安装库:

(7)修改安装目录:

         注:虽然修改了安装目录,但gRPC编译生成的产物任然在CMake配置生成路径下的Release或Debug路径下,需要我们手动拷贝。

(8)点击 Open Project,打开VS工程

(9)先右键ALL_BUILD生成:

(10)然后右键INSTALL生成:

出现下面输出则说明安装成功:

若右键INSTALL时出现错误:

严重性代码      说明       项目       文件       行禁止显示状态

错误  MSB3073      命令“setlocal

"D:\Program Files\CMake\bin\cmake.exe" -DBUILD_TYPE=Debug -P cmake_install.cmake

if %errorlevel% neq 0 goto :cmEnd

:cmEnd

endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone

:cmErrorLevel

exit /b %1 cmDone

if %errorlevel% neq 0 goto :VCEnd

:VCEnd”已退出,代码为1INSTALL C:\Program Files

 (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets 133

       解决方法:可能是安装路径在C盘下,VS没有创建文件夹权限,请关闭VS工程,使用管理者权限继续打开该工程,重新INSTALL。或将安装路径更改到其它盘,需要重新CMake。

       至此,gRPC安装步骤完成。

 

参考资料

       https://blog.csdn.net/yzheately/article/details/50887512

       INSTALL 错误参照上面博客。

       https://blog.csdn.net/qq_32245927/article/details/80541388

       安装OpenSSL参照上面博客。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是在 Windows编译 gRPC 的详细步骤: 1. 安装 Git 和 Visual Studio 在 Windows编译 gRPC,您需要先安装 Git 和 Visual Studio。您可以从以下链接下载和安装它们: - Git:https://git-scm.com/downloads - Visual Studio:https://visualstudio.microsoft.com/downloads/ 2. 克隆 gRPC 代码库 打开 Git Bash 或者其他命令行工具,输入以下命令来克隆 gRPC 代码库: ``` git clone -b v1.38.x https://github.com/grpc/grpc.git ``` 3. 安装依赖库 在 Windows编译 gRPC,您还需要安装一些依赖库,包括 OpenSSL 和 protobuf。您可以使用 vcpkg 工具来安装它们。以下是安装步骤: - 下载 vcpkg 工具:https://github.com/microsoft/vcpkg - 打开命令行工具,进入 vcpkg 目录,使用以下命令安装 OpenSSL 和 protobuf: ``` .\vcpkg.exe install openssl:x64-windows protobuf:x64-windows ``` 4. 生成 Visual Studio 解决方案和项目 进入 gRPC 代码库的根目录,在命令行工具中输入以下命令来生成 Visual Studio 解决方案和项目: ``` mkdir cmake_build cd cmake_build cmake -G "Visual Studio 16 2019" -A x64 -DCMAKE_TOOLCHAIN_FILE=..\third_party\vcpkg\scripts\buildsystems\vcpkg.cmake -DgRPC_SSL_PROVIDER=package -DgRPC_ZLIB_PROVIDER=package .. ``` 5. 构建 gRPC 打开生成的 Visual Studio 解决方案,选择 "Release" 配置,然后构建 gRPC 项目。 您可以使用 Visual Studio 中的菜单或者使用以下命令来构建: ``` cmake --build . --config Release ``` 6. 运行测试 构建完成后,在命令行工具中输入以下命令来运行 gRPC 的测试: ``` cd grpc cmake --build . --config Release --target grpc_cli cd cmake_build ctest -C Release --output-on-failure -j 4 ``` 以上就是在 Windows编译 gRPC 的步骤。注意,实际情况可能会因不同的环境而有所不同,这只是一个简单的指南。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值