Protobuf 環(huán)境配置和安裝——通過(guò)pb文件和源碼安裝指定版本

一、版本要求

團(tuán)隊(duì)內(nèi)部對(duì)齊版本號(hào),protoc 3.17.3/protoc-gen-swift 1.17.0。

1.1 查看版本號(hào)

?  ~ protoc --version         
libprotoc 3.17.3
?  ~ protoc-gen-swift --version
protoc-gen-swift 1.17.0

注意:安裝后和執(zhí)行前可以查看是否為對(duì)應(yīng)的版本號(hào),防止版本號(hào)不同導(dǎo)致生成的內(nèi)容不同。如果版本號(hào)不同式散,可以使用 which 命令查看工具所在位置,以確定是否安裝正常搓萧。

1.2 查看工具位置

?  ~ which protoc
/usr/local/bin/protoc
?  ~ which protoc-gen-swift
/usr/local/bin/protoc-gen-swift

二杂数、安裝 protoc 和 protoc-gen-swift

兩種方式安裝:
● pb文件安裝(homebrew)
● 源碼編譯

2.1 pb文件安裝

介紹如何通過(guò)查找并下載pb文件來(lái)安裝。下面以安裝 protoc 為例瘸洛。

2.1.1下載pb文件

使用 brew install protobuf / brew install swift-protobuf 會(huì)安裝最新版本揍移;
使用 brew install protobuf@3.17.3 / brew install swift-protobuf@1.17.0 會(huì)找不到對(duì)應(yīng)的版本。
因?yàn)閷?duì)應(yīng)的版本已經(jīng)不在 Formulae 了反肋。
Formulae 即 homebrew 的核心庫(kù)那伐;Casks 即 homebrew 的補(bǔ)充庫(kù)。

?  ~ brew search protobuf
==> Formulae
protobuf                   protobuf@21                protobuf@3.6
protobuf-c                 protobuf@3                 swift-protobuf

==> Casks
protopie

只能通過(guò)尋找pb文件來(lái)安裝石蔗。
● 執(zhí)行 brew info 命令:

?  ~ brew info protobuf
==> protobuf: stable 23.3 (bottled), HEAD
Protocol buffers (Google's data interchange format)
https://protobuf.dev/
Not installed
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/protobuf.rb
License: BSD-3-Clause
==> Dependencies
Build: cmake ?, python@3.10 ?, python@3.11 ?
Required: abseil ?
==> Options
--HEAD
    Install HEAD version
==> Analytics
install: 93,709 (30 days), 135,120 (90 days), 135,140 (365 days)
install-on-request: 23,273 (30 days), 23,273 (90 days), 23,273 (365 days)
build-error: 82 (30 days)
?  ~ brew info swift-protobuf
==> swift-protobuf: stable 1.22.0 (bottled), HEAD
Plugin and runtime library for using protobuf with Swift
https://github.com/apple/swift-protobuf
Not installed
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/swift-protobuf.rb
License: Apache-2.0
==> Dependencies
Required: protobuf ?
==> Requirements
Build: Xcode >= 8.3 (on macOS) ?
==> Options
--HEAD
    Install HEAD version
==> Analytics
install: 576 (30 days), 576 (90 days), 576 (365 days)
install-on-request: 576 (30 days), 576 (90 days), 576 (365 days)
build-error: 0 (30 days)

● 瀏覽器打開(kāi)上面查詢到的鏈接:
https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/protobuf.rb
https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/swift-protobuf.rb
● 查找對(duì)應(yīng)版本的歷史 commit
點(diǎn)擊右側(cè)的 History罕邀,查找到如下 commit 信息

protobuf: update 3.17.3 bottle.
@cho-m
@BrewTestBot
cho-m authored and BrewTestBot committed on Jul 6, 2021

● 下載文件
點(diǎn)擊 commit,進(jìn)入后右側(cè)三點(diǎn)選擇View file养距,然后下個(gè)頁(yè)面點(diǎn)擊右側(cè)的下載按鈕下載诉探。保存命名如 protobuf.pb。
對(duì)應(yīng)的文件鏈接:
https://github.com/Homebrew/homebrew-core/blob/ac2a2846981f6c6f9d6df64b9250a1e9f872cbf2/Formula/protobuf.rb
https://github.com/Homebrew/homebrew-core/blob/ac2a2846981f6c6f9d6df64b9250a1e9f872cbf2/Formula/protobuf.rb

2.1.2 安裝 pb 文件

?  ~ brew install ./protobuf.rb

如果遇到提示已經(jīng)安裝了其他版本棍厌,則先卸載肾胯,或者 unlink竖席。

?  ~ brew uninstall protobuf
or
?  ~ brew unlink protobuf

安裝完就可以編譯編寫(xiě)的文件了。

注意:安裝后和執(zhí)行前可以查看是否為對(duì)應(yīng)的版本號(hào)敬肚,防止版本號(hào)不同導(dǎo)致生成的內(nèi)容不同毕荐。如果版本號(hào)不同,可以使用 which 命令查看工具所在位置艳馒,以確定是否安裝正常憎亚。

2.2 源碼編譯

介紹如何通過(guò)源碼安裝。
由于 protobuf 早期的版本是沒(méi)有適配 m1 芯片的弄慰,所以 m1 芯片的話需要特殊處理下文件第美。

2.2.1 安裝 protoc

● 在 gifthub 上找到對(duì)應(yīng)的版本鏈接:
https://github.com/protocolbuffers/protobuf/releases/tag/v3.17.3
● 下載對(duì)應(yīng)的文件:
protobuf-all-3.17.3.tar.gz
壓縮包中包含了其他平臺(tái)的,如 java陆爽,項(xiàng)目需要用來(lái)生成對(duì)應(yīng)的 .java 文件斋日。
● 執(zhí)行下面的操作安裝

./configure
make
make check
make install

2.2.1.1 M1 芯片額外處理

打開(kāi) protobuf-3.17.3/src/google/protobuf/stubs/platform_macros.h,找到下面的內(nèi)容:

#else
GOOGLE_PROTOBUF_PLATFORM_ERROR

在 #else 上面添加以下代碼:

#elif defined(__arm64__)
#define GOOGLE_PROTOBUF_ARCH_ARM 1
#define GOOGLE_PROTOBUF_ARCH_64_BIT 1

然后再執(zhí)行安裝的操作墓陈。

2.2.2 安裝 protoc-gen-swift

https://github.com/apple/swift-protobuf
鏈接中的 README.md 介紹了如何安裝,摘取如下:

$ git clone https://github.com/apple/swift-protobuf.git
$ cd swift-protobuf
$ git tag -l
$ git checkout tags/1.17.0
$ swift build -c release

將 .build/release 中的 protoc-gen-swift 路徑添加到 PATH 中第献,或者直接復(fù)制到 protoc 的目錄下贡必,一般是 /usr/local/bin。

三庸毫、編譯文件

在統(tǒng)一的腳本目錄下仔拟,有簡(jiǎn)單的處理文件 playmate/scripts/pb.sh,右鍵執(zhí)行即可飒赃。
具體的文件路徑參考項(xiàng)目架構(gòu)利花。
注意:如果通過(guò)多種方式安裝了,要確認(rèn)好執(zhí)行時(shí)的版本號(hào)和安裝位置是否符合預(yù)期载佳。

四炒事、參考文檔

http://www.reibang.com/p/78a0ed238e14
https://github.com/protocolbuffers/protobuf/issues/8836

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蔫慧,隨后出現(xiàn)的幾起案子挠乳,更是在濱河造成了極大的恐慌,老刑警劉巖姑躲,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件睡扬,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡黍析,警方通過(guò)查閱死者的電腦和手機(jī)卖怜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)阐枣,“玉大人马靠,你說(shuō)我怎么就攤上這事奄抽。” “怎么了虑粥?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵如孝,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我娩贷,道長(zhǎng)第晰,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任彬祖,我火速辦了婚禮茁瘦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘储笑。我一直安慰自己甜熔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布突倍。 她就那樣靜靜地躺著腔稀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪羽历。 梳的紋絲不亂的頭發(fā)上焊虏,一...
    開(kāi)封第一講書(shū)人閱讀 51,763評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音秕磷,去河邊找鬼诵闭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛澎嚣,可吹牛的內(nèi)容都是我干的疏尿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼易桃,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼褥琐!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起颈抚,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤踩衩,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后贩汉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體驱富,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年匹舞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了褐鸥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡赐稽,死狀恐怖叫榕,靈堂內(nèi)的尸體忽然破棺而出浑侥,到底是詐尸還是另有隱情,我是刑警寧澤晰绎,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布寓落,位于F島的核電站,受9級(jí)特大地震影響荞下,放射性物質(zhì)發(fā)生泄漏伶选。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一尖昏、第九天 我趴在偏房一處隱蔽的房頂上張望仰税。 院中可真熱鬧,春花似錦抽诉、人聲如沸陨簇。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)河绽。三九已至,卻和暖如春唉窃,著一層夾襖步出監(jiān)牢的瞬間葵姥,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工句携, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人允乐。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓矮嫉,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親牍疏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蠢笋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容