目錄
前言:
一、環(huán)境準(zhǔn)備
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、生產(chǎn)解決方案
3.3、編譯
錯(cuò)誤1
錯(cuò)誤2
錯(cuò)誤3:
錯(cuò)誤4
3.4、生產(chǎn)庫
四、靜態(tài)庫分享
前言:
????????GRPC,其實(shí)就是RPC框架的一種,前面帶了一個(gè)g,代表是RPC中的大哥,龍頭老大的意思,另外g也有g(shù)lobal的意思,意思是全球化比較fashion,是一個(gè)高性能、開源和通用的 RPC 框架,基于ProtoBuf(Protocol Buffers)?序列化協(xié)議開發(fā),且支持眾多開發(fā)語言。面向服務(wù)端和移動(dòng)端,基于 HTTP/2 設(shè)計(jì),帶來諸如雙向流、流控、頭部壓縮、單 TCP 連接上的多復(fù)用請(qǐng)求等特。這些特性使得其在移動(dòng)設(shè)備上表現(xiàn)更好,更省電和節(jié)省空間占用。
? ? ? ?本人之前編譯過一次grpc源碼,但是最近需要?jiǎng)e的系統(tǒng)版本,編譯起來居然用了一天半時(shí)間,索性,乘晚上安靜之際,隨手寫下來,以備不時(shí)之需。?下面詳細(xì)介紹grpc編譯.
? ? ? ?最近有好多人私信我,希望幫助編譯grpc庫,沒有及時(shí)看到信息。先將本人郵箱留下,有問題伙伴可以發(fā)送郵件,會(huì)在第一時(shí)間看到。郵箱:1255450653@qq.com.
一、環(huán)境準(zhǔn)備
1.1、安裝cmake
下載地址:https://cmake.org/download/
注意:選擇添加環(huán)境變量。
1.2、安裝Perl
下載地址:https://jingyan.baidu.com/article/9f7e7ec0b798ae6f281554e9.html
1.3、安裝golang
下載地址:Go下載 - Go語言中文網(wǎng) - Golang中文社區(qū)
1.4、安裝Visual Studio (推薦2022)
下載地址:https://visualstudio.microsoft.com/zh-hans/vs/
注意:windows sdk選擇10.0.2以上版本。
1.5、安裝git
參考:Git
這部分可省略,因?yàn)間ithub庫下載源碼非常慢。還不如直接下載zip包來的快。
1.6、安裝yasm
? 下載網(wǎng)站:http://yasm.tortall.net/Download.html
?下載完成之后yasm-1.3.0-win64.exe。將其名字改為yasm.exe,并將目錄添加到系統(tǒng)環(huán)境變量PATH路徑當(dāng)中。
打開cmd,驗(yàn)證如下:
1.7、安裝,配置openssl庫
這步可以不用設(shè)置,跳過。
下載地址:https://download.csdn.net/download/ManagerUser/86510880
配置環(huán)境變量:
?ok,至此,前期的準(zhǔn)備工作就完成了。
二、源碼下載
2.1、grpc源碼下載
地址: GitHub - grpc/grpc: The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)
下載zip速度較快。git 太慢了。
2.2、第三方庫下載
????????grpc依賴了大量第三方庫,但是光下載grpc源碼,還不能完全下載 grpc依賴的庫,網(wǎng)上有很多資料顯示,用xxx命令,都是扯談,沒有半小時(shí)下載不下來,并且如果沒有代理的話,會(huì)提示訪問超時(shí),完全不可用。
????????下面介紹一種最原始方式,也是最可行的方法。
? ? ? ? 不同版本grpc卻依賴的庫稍微有點(diǎn)差別,為了更為準(zhǔn)確的了解grpc依賴的第三方庫,就需要去grpc源碼查看具體依賴的庫。git上grpc源碼根目錄下third_party目錄下,如圖所示,所有藍(lán)色庫,都是需要我們手動(dòng)下載。
?????????注意:grpc/third_party/cares/cares依賴庫。
?
將所有g(shù)rpc依賴的庫全部下載下來,并且拷貝到對(duì)于的目錄下面。不能落下,否則在編譯階段報(bào)一些莫名的錯(cuò)誤。
三、編譯源碼
3.1、新建.build
????????在grpc根目錄下新建.build文件夾
3.2、生成解決方案
? ? ? 打開cmake? gui界面,選擇source code和 build目錄。
?點(diǎn)擊Configure,彈出如下界面
選擇Visual Studio版本和平臺(tái)(x64或Win32)。點(diǎn)擊Finish
?庫的安裝目錄盡量不要選擇系統(tǒng)盤,要不在生產(chǎn)庫文件時(shí)候,沒有權(quán)限。
如果出現(xiàn)如下出錯(cuò):
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.
?這個(gè)錯(cuò)誤忽略就行。網(wǎng)上說要勾選ABSL_PROPAGATE_CXX_STD,大坑。
如果出現(xiàn)如下出錯(cuò):
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設(shè)置為package,就會(huì)自動(dòng)去系統(tǒng)環(huán)境變量查找相應(yīng)的庫
再次Configure
出現(xiàn)Configure done,說明configure完成。
點(diǎn)擊Generate。
?出現(xiàn)Generating done說明已經(jīng)生產(chǎn)Visual Studio工程文件,可以去.build文件夾下去查看,
?點(diǎn)擊Open Project或者右鍵單擊grpc.sln,打開項(xiàng)目,可以選擇編譯Debug和Release
3.3、編譯
右鍵單擊ALL_BUILD,選擇生產(chǎn),開始編譯。
往往這個(gè)步驟是最讓人痛苦的階段。
錯(cuò)誤1
fatal error C1083: 無法打開包括文件: “stdalign.h”: No such file or directory
【項(xiàng)目】->【屬性】->選擇widnows sdk 版本到最新安裝的版本
點(diǎn)擊應(yīng)用。確定。
錯(cuò)誤2
error C2039: "Status": 不是 "google::protobuf::util" 的成員
error C4430: 缺少類型說明符 - 假定為 int。注意: C++ 不支持默認(rèn) int
error C2146: 語法錯(cuò)誤: 缺少“;”(在標(biāo)識(shí)符“Status”的前面)
解決辦法:
可能是protobuf版本太新了,最新的版本是4.0,推薦使用3.19,下載成功之后,解壓,拷貝到third_party/protobuf目錄下替換就可以了。重新Configure
錯(cuò)誤3:
error C2011: “sockaddr”:“struct”類型重定義
error C2143: 語法錯(cuò)誤: 缺少“}”(在“常數(shù)”的前面)
error C2059: 語法錯(cuò)誤:“常數(shù)”
error C2143: 語法錯(cuò)誤: 缺少“;”(在“}”的前面)
error C2011: “sockaddr_in”:“struct”類型重定義
error C2011: “fd_set”:“struct”類型重定義
解決辦法,參考:https://blog.csdn.net/weixin_41454036/article/details/108844486
錯(cuò)誤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 環(huán)境變量
$env:GOPROXY = "https://proxy.golang.com.cn,direct"
# 還可以設(shè)置不走 proxy 的私有倉庫或組,多個(gè)用逗號(hào)相隔(可選)
$env:GOPRIVATE = "git.mycompany.com,github.com/my/private
?然后,重試編譯。
?編譯完成。
3.4、生成庫
選擇INSTALL,右鍵單擊,生成。
查看生產(chǎn)的庫目錄:
?以上步驟win10系統(tǒng),64位庫,32位庫請(qǐng)?jiān)赾make 平臺(tái)選擇Win32,重新按照步驟編輯即可。
?Release和Debug版本請(qǐng)?jiān)赩isual Studio 解決方案配置選擇即可。
四、靜態(tài)庫分享
? ? ? 編譯確實(shí)比較麻煩,我在編譯解決參考了網(wǎng)上博客不下20篇,沒有一篇博客能指導(dǎo)我順利走下來,所有將靜態(tài)庫分享出來,不想編譯的朋友直接下載,永久收取5個(gè)積分。
? ? 32位靜態(tài)庫, debug版本和relase版本
? ? 64位靜態(tài)庫, debug版本和release版本?文章來源:http://www.zghlxwxcb.cn/news/detail-402124.html
下載地址:
(8條消息) windowsgrpcc++靜態(tài)庫-C++文檔類資源-CSDN文庫https://download.csdn.net/download/ManagerUser/86510933文章來源地址http://www.zghlxwxcb.cn/news/detail-402124.html
到了這里,關(guān)于Windows GRPC源碼編譯C++庫——詳細(xì)步驟的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!