Windows GRPC源码编译C++库——详细步骤

windows系统下编译和使用grpc 把helloworld.proto、helloworld.pb.h、helloworld.pb.cc、helloworld.grpc.pb.h、helloworld.grpc.pb.cc添加到server项目中,同时greeter_server.cc的代码拷贝到main.cpp文件,并稍微改造一下。把该目录下的所依赖的库文件都通过https://github.com/grpc/grpc/tree/master/third_party下载并解压放到grpc/third_party。 阅读详情
AI摘要

本文详细介绍了在Windows系统中编译gRPC源码的步骤,包括环境准备(安装cmake、Perl、golang、Visual Studio、git、yasm和openssl)、源码下载、编译过程及解决编译过程中遇到的错误。作者分享了个人经验,提供了一次编译失败后的解决方法,并给出了静态库的下载链接。

目录

前言:

一、环境准备

1.1、安装cmake

1.2、安装Perl

1.3、安装golang

1.4、安装Visual Studio (推荐2022)

1.5、安装git

1.6、安装yasm

1.7、安装,配置openssl库

二、源码下载

2.1、grpc源码下载

2.2、第三方库下载

三、编译源码

3.1、新建.build

3.2、生产解决方案

3.3、编译

错误1

错误2

错误3:

错误4

3.4、生产库

四、静态库分享


前言:

        GRPC,其实就是RPC框架的一种,前面带了一个g,代表是RPC中的大哥,龙头老大的意思,另外g也有global的意思,意思是全球化比较fashion,是一个高性能、开源和通用的 RPC 框架,基于ProtoBuf(Protocol Buffers) 序列化协议开发,且支持众多开发语言。面向服务端和移动端,基于 HTTP/2 设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。

       本人之前编译过一次grpc源码,但是最近需要别的系统版本,编译起来居然用了一天半时间,索性,乘晚上安静之际,随手写下来,以备不时之需。 下面详细介绍grpc编译.

       最近有好多人私信我,希望帮助编译grpc库,没有及时看到信息。先将本人邮箱留下,有问题伙伴可以发送邮件,会在第一时间看到。邮箱:1255450653@qq.com.

一、环境准备

1.1、安装cmake

下载地址:https://cmake.org/download/

注意:选择添加环境变量。

1.2、安装Perl

下载地址:https://jingyan.baidu.com/article/9f7e7ec0b798ae6f281554e9.html

1.3、安装golang

下载地址:Go下载 - Go语言中文网 - Golang中文社区

1.4、安装Visual Studio (推荐2022)

下载地址:https://visualstudio.microsoft.com/zh-hans/vs/

注意:windows sdk选择10.0.2以上版本。

1.5、安装git

参考:Git

这部分可省略,因为github库下载源码非常慢。还不如直接下载zip包来的快。

1.6、安装yasm

  下载网站:http://yasm.tortall.net/Download.html

 下载完成之后yasm-1.3.0-win64.exe。将其名字改为yasm.exe,并将目录添加到系统环境变量PATH路径当中。

打开cmd,验证如下:

1.7、安装,配置openssl库

这步可以不用设置,跳过。

下载地址:https://download.youkuaiyun.com/download/ManagerUser/86510880

配置环境变量:

 ok,至此,前期的准备工作就完成了。

二、源码下载

2.1、grpc源码下载

地址: GitHub - grpc/grpc: The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)

下载zip速度较快。git 太慢了。

2.2、第三方库下载

        grpc依赖了大量第三方库,但是光下载grpc源码,还不能完全下载 grpc依赖的库,网上有很多资料显示,用xxx命令,都是扯谈,没有半小时下载不下来,并且如果没有代理的话,会提示访问超时,完全不可用。

        下面介绍一种最原始方式,也是最可行的方法。

        不同版本grpc却依赖的库稍微有点差别,为了更为准确的了解grpc依赖的第三方库,就需要去grpc源码查看具体依赖的库。git上grpc源码根目录下third_party目录下,如图所示,所有蓝色库,都是需要我们手动下载。

         注意:grpc/third_party/cares/cares依赖库。

 

将所有grpc依赖的库全部下载下来,并且拷贝到对于的目录下面。不能落下,否则在编译阶段报一些莫名的错误。

三、编译源码

3.1、新建.build

        在grpc根目录下新建.build文件夹

3.2、生成解决方案

      打开cmake  gui界面,选择source code和 build目录。

 点击Configure,弹出如下界面

选择Visual Studio版本和平台(x64或Win32)。点击Finish

 库的安装目录尽量不要选择系统盘,要不在生产库文件时候,没有权限。

如果出现如下出错:

CMake Warning at third_party/abseil-cpp/CMakeLists.txt:70 (message):
A future Abseil release will default ABSL_PROPAGATE_CXX_STD to ON for CMake
3.8 and up. We recommend enabling this option to ensure your project still
builds correctly.

 这个错误忽略就行。网上说要勾选ABSL_PROPAGATE_CXX_STD,大坑。

如果出现如下出错:

CMake Warning at cmake/ssl.cmake:55 (message):
gRPC_SSL_PROVIDER is "module" but BORINGSSL_ROOT_DIR is wrong
Call Stack (most recent call first):
CMakeLists.txt:255 (include)

将grpc_ssl_provider设置为package,就会自动去系统环境变量查找相应的库

再次Configure

出现Configure done,说明configure完成。

点击Generate。

 出现Generating done说明已经生产Visual Studio工程文件,可以去.build文件夹下去查看,

 点击Open Project或者右键单击grpc.sln,打开项目,可以选择编译Debug和Release

3.3、编译

右键单击ALL_BUILD,选择生产,开始编译。

往往这个步骤是最让人痛苦的阶段。

错误1

fatal error C1083: 无法打开包括文件: “stdalign.h”: No such file or directory

【项目】->【属性】->选择widnows sdk 版本到最新安装的版本

点击应用。确定。

错误2

error C2039: "Status": 不是 "google::protobuf::util" 的成员 
error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int 
error C2146: 语法错误: 缺少“;”(在标识符“Status”的前面) 

解决办法:

可能是protobuf版本太新了,最新的版本是4.0,推荐使用3.19,下载成功之后,解压,拷贝到third_party/protobuf目录下替换就可以了。重新Configure

错误3:

error C2011: “sockaddr”:“struct”类型重定义 
error C2143: 语法错误: 缺少“}”(在“常数”的前面) 
error C2059: 语法错误:“常数”
error C2143: 语法错误: 缺少“;”(在“}”的前面) 
error C2011: “sockaddr_in”:“struct”类型重定义 
error C2011: “fd_set”:“struct”类型重定义

解决办法,参考:https://blog.youkuaiyun.com/weixin_41454036/article/details/108844486

错误4

error MSB8066: “D:\grpc-master\.build\CMakeFiles\1d6eed4bb9d57f066d15abcf1966767c\crypto_test_data.cc.rule;D:\g
rpc-master\third_party\boringssl-with-bazel\CMakeLists.txt”的自定义生成已退出,代码为 1。 [D:\grpc-master\.build\third_party\boringssl-with-bazel\crypto_test_data.vcxproj]

解决办法:

打开windows PowerShell

# 配置 GOPROXY 环境变量
$env:GOPROXY = "https://proxy.golang.com.cn,direct"
# 还可以设置不走 proxy 的私有仓库或组,多个用逗号相隔(可选)
$env:GOPRIVATE = "git.mycompany.com,github.com/my/private

 然后,重试编译。

 编译完成。

3.4、生成库

选择INSTALL,右键单击,生成。

查看生产的库目录:

 以上步骤win10系统,64位库,32位库请在cmake 平台选择Win32,重新按照步骤编辑即可。

 Release和Debug版本请在Visual Studio 解决方案配置选择即可。

四、静态库分享

      编译确实比较麻烦,我在编译解决参考了网上博客不下20篇,没有一篇博客能指导我顺利走下来,所有将静态库分享出来,不想编译的朋友直接下载,永久收取5个积分。

    32位静态库, debug版本和relase版本

    64位静态库, debug版本和release版本 

下载地址:
(8条消息) windowsgrpcc++静态库-C++文档类资源-优快云文库https://download.youkuaiyun.com/download/ManagerUser/86510933

gRPC编译战争:VS2022环境下的依赖管理生存指南 本文详细解析了在VS2022环境下编译gRPC的挑战与解决方案,涵盖依赖管理、C++与Python混合开发等核心问题。针对google rpc框架在Windows平台的编译陷阱,提供了从环境配置到性能优化的完整生存指南,帮助开发者高效构建跨语言微服务应用。 阅读详情

相关推荐

Windows 11 + VS2022 编译 gRPC 1.62.1 C++ 客户端与 Python 服务端实战

在分布式系统和微服务架构中,远程过程调用(RPC)是实现跨语言、跨进程通信的核心技术。其原理是通过预定义的接口协议,允许一个程序调用位于不同地址空间(通常是另一台机器上)的过程或函数,从而实现服务间的解耦与高效协作。基于 HTTP/2 和 Protocol Buffers 的 gRPC 框架,凭借其高性能、支持流式传输和双向通信等技术优势,已成为构建现代云原生和物联网应用的重要基础设施。在需要处理大量数据或实时交互的典型应用场景,如微服务间通信、实时数据管道和游戏服务器通信中,gRPC 能显著提升效率。然而

weixin_42561249的博客 239

GRPC源码编译

一 GRPC GRPC 是一个高性能、开源、通用的RPC框架,由Google推出,基于HTTP2协议标准设计开发,默认采用Protocol Buffers数据序列化协议,支持多种开发语言。 gRPC提供了一种简单的方法来精确的定义服务,并且为客户端和服务端自动生成可靠的功能库。 项目中需要使用GRPC,所以决定使用源码形式cmake进行安装,本来以为是挺简单的事情,结果忙活了半天,所以记录下相关的安装过程,防止以后再次编译的时候踩坑。 二、GRPC源码和相关子模块 首先,我们从github下载GRPC的源代

老码农 2758

Windows下VS2019手动编译gRPC:从环境配置到项目集成的完整指南

远程过程调用(RPC)是分布式系统实现服务间通信的核心机制,它通过抽象网络通信细节,让开发者能够像调用本地函数一样调用远程服务。gRPC作为Google开源的高性能、跨语言RPC框架,基于HTTP/2协议和Protocol Buffers序列化协议,提供了强类型接口定义和高效的二进制传输能力。其技术价值在于显著简化了微服务架构中的服务间通信,并支持双向流、超时控制等高级特性。在Windows平台下,通过Visual Studio 2019手动编译gRPC源码,能够实现对框架的深度定制和源码级调试,这对于需要

weixin_29587015的博客 297

CENTOS上的网络安全工具(二十四)Windows下的Hadoop+Spark编程环境构建

前面我们搭建了hadoop集群,spark集群,也利用容器构建了spark的编程环境。但是一般来说,就并行计算程序的开发,一刚开始一般是在单机上的,比如hadoop的single node。但是老师弄个容器或虚拟机用vscode远程访问式开发,终究还是有些不爽。还好,hadoop和spark都是支持windows的。不妨,我们弄个windows下的开发环境。然而,windows下开发环境的构建,需要一个转换程序winutils.exe,这个需要根据下载的hadoop的版本对应编译。

lhyzws的专栏 9056

Windows+VS2019手动编译gRPC全流程:从环境配置到项目集成

在现代分布式系统和微服务架构中,远程过程调用(RPC)是实现服务间高效通信的核心技术。gRPC作为Google开源的高性能RPC框架,基于HTTP/2协议和Protocol Buffers序列化协议,提供了跨语言、可扩展的通信解决方案。其技术价值在于通过严格的接口定义和高效的二进制编码,显著提升服务调用性能,降低网络开销。在Windows平台C++开发环境中,由于企业内网限制、定制化编译需求或对依赖组件的深度控制,手动编译gRPC成为必要技能。本文聚焦于CMake构建工具和Visual Studio 201

weixin_30899023的博客 269

Google Cloud C++客户端库安装配置全攻略:从依赖管理到项目集成

在现代C++云服务开发中,依赖管理和跨平台构建是开发者必须掌握的核心技能。其原理在于通过构建系统(如CMake)和包管理器(如vcpkg)自动化处理复杂的库依赖关系图,确保版本兼容性。这项技术的价值在于能显著提升开发效率,避免手动处理底层网络请求、认证等繁琐细节,让开发者专注于业务逻辑。典型的应用场景包括对接Google Cloud Platform(GCP)服务,例如从Cloud Storage读写文件或用BigQuery分析数据。本文聚焦于Google Cloud C++客户端库,针对其安装配置过程中的

weixin_30693683的博客 511

Windows平台gRPC C++库手动编译指南:从源码到VS2019项目集成

在现代分布式系统开发中,远程过程调用(RPC)是实现服务间通信的核心技术,它通过抽象网络通信细节,让开发者像调用本地函数一样调用远程服务。gRPC作为Google开源的高性能RPC框架,基于HTTP/2协议和Protocol Buffers序列化协议,提供了跨语言、高效的服务通信能力。其技术价值在于通过严格的接口定义和自动代码生成,确保了服务契约的一致性,同时利用多路复用、头部压缩等HTTP/2特性优化网络性能。在微服务、云原生等应用场景中,gRPC已成为构建高性能API的首选方案。然而,在Windows平

weixin_42545503的博客 234

VS2015编译gRPC完整指南:版本选型、依赖配置与避坑

远程过程调用(RPC)是现代分布式系统通信的基石,gRPC凭借HTTP/2、多语言支持和高效的protobuf序列化,成为主流选择。然而,在Windows老版本开发环境(如VS2015)中编译gRPC并非易事:官方早已放弃对VS2015的支持,直接使用最新源码会遭遇大量C++语法错误。对此,选用gRPC 1.20.x与protobuf 3.8.x的版本组合,通过CMake手动配置依赖树(zlib、OpenSSL、c-ares等),即可实现从源码编译到落地运行。以实际项目为例,详细记录在VS2015下编译gR

weixin_28676289的博客 241

gRPC C++ - Building from source

gRPC C++ - Building from source Pre-requisites Linux $ [sudo] apt-get install build-essential autoconf libtool pkg-config If you plan to build from source and run tests, install the follow...

maimang1001的专栏 792

Windows下编译gRPC C++静态库完整指南(VS2022+cmake 3.25)

gRPC 是基于 HTTP/2 的高性能 RPC 框架,其 C++ 实现依赖复杂的构建系统与多层依赖管理。在 Windows 平台,默认构建行为强制动态链接、启用 /MD 运行时,并屏蔽静态库生成开关,导致开发者频繁遭遇 LNK2019 符号未定义、grpc_cpp_plugin 缺失、protobuf 冲突等典型链接失败问题。掌握静态库编译原理,关键在于理解 CMake 构建参数如何控制子模块集成(abseil、protobuf、OpenSSL)、运行时库绑定(/MT vs /MD)及插件代码生成机制。该

weixin_31315567的博客 178

VS2015构建gRPC实战:MSVC 14.0 ABI对齐与CMake兼容方案

gRPC 是基于 HTTP/2 的高性能 RPC 框架,其 C++ 实现深度依赖编译器 ABI、运行时库(如 /MD)和第三方组件(Protobuf、c-ares、zlib)的二进制兼容性。在 Windows 平台,MSVC 14.0(即 VS2015)因工具链陈旧、C++11 支持不完整及 CMake 策略演进,极易触发 LNK2001 符号未解析、find_package 查找失败等构建异常——本质是 ABI 对齐断裂。本文聚焦 VS2015 这一典型遗留环境,详解 MSVC 工具集校验、CMake 3

weixin_34072296的博客 248

tensorflow源码编译教程_Windows下Tensorflow-gpu_C++库编译

概述  本文旨在实现Windows环境下Tensorflow-gpu_C++版本库文件编译与使用。经测试,选取tensorflow-1.8.0版本源码进行编译[1],不同CUDA版本的开发环境可按照本教程编译tensorflow-1.8.0_C++库文件。主要参考教程:https://blog.youkuaiyun.com/yuejisuo1948/article/details/84197534。  注1:...

weixin_39868663的博客 398

gRPC源码(2023.06.30左右下载)

gRPC源码(2023.06.30左右下载) 优快云审核可能较慢,如无法下载,可以过段时间再回来看下 仅供相关爱好者交流使用,请于下载24小时内删除

Windows下gRPC C++与Python跨语言通信实战:从源码编译到项目集成

在分布式系统和微服务架构中,远程过程调用(RPC)是实现高效服务间通信的核心技术。其原理是通过预定义的接口协议,使不同进程或机器上的函数调用像本地调用一样透明。相比于传统的RESTful API,RPC框架(如gRPC)采用二进制序列化和多路复用等技术,能显著降低延迟和CPU开销,提升系统整体性能。这一技术价值在高并发、低延迟的数据处理、微服务解耦及混合技术栈协作等场景中尤为突出。本文聚焦于gRPC这一现代RPC框架,详细记录了在Windows平台上,使用Visual Studio 2022和vcpkg从源

weixin_42552716的博客 316

grpc源码,方便编译

grpc源码,方便编译。

STM32F103模拟SSI时序解析:实现高精度绝对式编码器位置读取

本文详细解析了如何在STM32F103微控制器上通过软件模拟SSI协议时序,实现高精度绝对式编码器的位置读取。文章从项目驱动出发,深入剖析了SSI通信原理、硬件电平转换连接、核心软件模拟代码实现及关键时序参数调试方法,并提供了使用示波器进行波形对齐与优化的实战指南,为成本敏感型工业控制与机器人项目提供了高性价比的解决方案。

weixin_29196315的博客 141

gRPC C++源码编译全指南:Windows/Linux踩坑与CMake配置详解

远程过程调用(RPC)是分布式系统与微服务架构的核心通信方式,gRPC作为高性能RPC框架,在C++工程中往往需要从源码编译以获得版本与模块的可控性。整个编译过程依赖CMake构建系统与protobuf协议编译器,并需处理BoringSSL、c-ares等第三方库的匹配问题。由于编译器版本、子模块完整性和依赖顺序等因素,开发者常会遇到MSB6006、undefined reference等典型报错。掌握从工具链选型、CMake参数配置到报错定位的完整链路,能显著提升在Windows、Linux及ARM交叉编

weixin_28681255的博客 230

从零到一:NI USB-8506 LIN通讯的驱动安装与硬件调试全攻略

本文详细介绍了NI USB-8506 LIN通讯设备的驱动安装与硬件调试全流程,包括硬件准备、驱动下载与配置、NI MAX设置及常见问题解决方案。通过实战应用与性能优化技巧,帮助用户快速掌握LIN通讯技术,适用于车载数据记录和自动化测试等场景。

weixin_28273593的博客 924

跨平台s2client-api环境配置指南:从CMake到实战避坑

在游戏AI与机器学习开发中,环境配置是项目成功的关键基础环节。CMake作为跨平台构建工具,通过管理项目依赖和编译流程,解决了不同操作系统下的构建一致性问题。其技术价值在于实现了“一次编写,到处构建”,极大提升了C++项目的可移植性和团队协作效率。在游戏AI开发、特别是基于《星际争霸II》的s2client-api项目中,CMake与Protobuf、gRPC等依赖库的协同配置,直接决定了AI智能体与游戏引擎的通信稳定性。本文聚焦于s2client-api这一核心库,针对Windows、Linux、macO

weixin_34195364的博客 466

代码接单:用 ComfyUI 搭建电商模特换装工作流(保姆级教程)

在闲鱼和小红书上,搜一下“AI 模特图”或者“服装换模特”,你会发现大量的接单需求。太贵:请个外模拍一套图,动辄几千块。太慢:寄样品、排期、拍摄、修图,半个月过去了。太卷:竞对都在上新,你还在等图。“给我一张你的衣服平铺图(或假人图),我 10 分钟给你生成真人上身图,一张只要 50 块。对于商家是省钱,对于你是纯利润。为什么不用 Midjourney?因为 MJ 抽卡不可控,无法保持衣服版型一致。只有 ComfyUI,才能做到精准控制,实现工业化量产。

BUG猿的博客 1777

揭秘LLM如何预测下一个词

Transformer结构的大语言模型(LLM)通过自回归训练学习预测下一个词汇,其核心能力源自权重矩阵的动态优化。自注意力层的Wq/Wk/Wv矩阵捕捉语义关联,前馈网络的W1/W2矩阵进行非线性特征提取,LM Head的W_{lm}矩阵将语义映射到词汇概率。训练过程中,这些矩阵通过反向传播不断调整,最终使模型能够根据上下文(如"我"→"爱")生成合理的后续词汇。这种基于矩阵变换的数学机制是LLM智能生成文本的本质原因。(150字)

ZhangJiqun&191cm&85kg 376

windows+vs2017 C++编译gRPC

分别注释xxx_client.cc与xxx_server.cc文件中的main函数,并编辑,即可生成对应的client与server程序,先运行server程序,在运行client程序,进行通讯尝试,成功通讯。,需要vs2019及以上版本,本想进行vs的版本升级,但考虑到项目代码版本问题,最终选择低版本的gRPC进行编译与使用,再次查阅资料,最终,根据大佬的这篇文件。打开命令行终端,并输入两条指令,用于生成对应.proto文件的.grpc.pb.cc/.h以及.pb.cc/.h文件。

weixin_44328139的博客 3164

AUTOSAR知识点:PDUR(PDU Router)基础知识

通过定义路由表和实现相应的路由和缓冲逻辑,PDUR能够确保PDU在不同ECU之间的可靠传输。在上述示例中,我们定义了一个简单的PDUR路由表,其中列出了源ECU和目标ECU之间的映射关系。当收到来自源ECU的PDU时,PDUR模块会根据路由表查找目标ECU,并将PDU传输到相应的目标ECU。PDUR的主要功能是将接收到的PDU从一个ECU路由到另一个ECU,并确保数据的正确传输。需要注意的是,上述示例是一个简化的实现,实际的PDUR模块可能包含更复杂的功能和逻辑。

EcmFsharp的博客 1157
上一篇: Qt开发 VS2019 C2001 常量中有换行符
下一篇: windows openssl源码编译
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值