<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          在M1 Mac上編譯使用arm64原生go

          共 1535字,需瀏覽 4分鐘

           ·

          2020-12-17 01:33

          go會(huì)在2021年2月發(fā)布的1.16版中正式Apple Silicon,即arm64架構(gòu)的Mac操作系統(tǒng),雖然還未正式發(fā)布,但目前go 1.16版已經(jīng)進(jìn)入feature freeze期,只是會(huì)再修修bug,改進(jìn)文檔等,喜歡嘗鮮的朋友,其實(shí)已經(jīng)可以在m1 mac里面下載go最新的源碼,然后編譯原生arm64版的go出來(lái)。

          以下操作我全部在m1 mac mini上完成;并假設(shè)go的工具鏈安裝在 $HOME/goroots 路徑下。

          mac上需要確保安裝有 rosetta 2(https://support.apple.com/en-us/HT211861)。

          安裝go 1.15

          自go 1.4開(kāi)始,go的編譯器已經(jīng)實(shí)現(xiàn)了自舉,即我們可以使用go本身來(lái)編譯go,那么,為了在mac上使用arm64的go 1.16嘗鮮版,我們首先需要amd64的go 1.15。

          說(shuō)是安裝,但其實(shí)只需要下載就可以了:

          mkdir $HOME/goroots
          cd $HOME/goroots
          wget https://dl.google.com/go/go1.15.6.darwin-amd64.tar.gz
          tar xzf go1.15.6.darwin-amd64.tar.gz

          獲得go源碼

          直接clone go源碼倉(cāng)庫(kù):

          cd $HOME/goroots
          git clone https://go.googlesource.com/go gosource

          克隆github上的go源碼鏡像(github.com/golang/go)也行。

          clone出來(lái)之后目前master分支便是 1.16 的預(yù)發(fā)布分支。

          預(yù)編譯darwin/arm64

          要編譯go的話,需要先預(yù)編譯 bootstrap 響應(yīng)的工具鏈,這個(gè)工具鏈本身也是需要是arm64版,不然最后make出來(lái)的還會(huì)是x86。

          cd $HOME/goroots/gosource/src
          arch --x86_64 env GOROOT_BOOTSTRAP=$HOME/goroots/go GODEBUG=asyncpreemptoff=1 GOOS=darwin GOARCH=arm64 ./bootstrap.bash

          注意上面的編譯環(huán)境變量參數(shù)中有 GODEBUG=asyncpreemptoff=1 ,這是因?yàn)槲覀兊膅o 1.15是amd64版,直接在m1 mac中運(yùn)行時(shí)需要依賴 rosetta 2,而目前似乎rosetta 2對(duì)于go的協(xié)程異步搶占還有bug,因此需要關(guān)閉;否則編譯時(shí)會(huì)死鎖并出現(xiàn)錯(cuò)誤:

          rosetta error: ulock_wait failure: 105

          完成這步后,我們便可在 $HOME/goroots/go-darwin-arm64-bootstrap 路徑下獲得編譯完整go的arm64工具鏈

          編譯arm64原生go

          cd $HOME/goroots/gosource/src
          arch --arm64e env GOROOT_BOOTSTRAP=$HOME/goroots/go-darwin-arm64-bootstrap ./make.bash

          這樣我們便可在 $HOME/goroots/gosource/bin/go 獲得arm64的go啦~export $HOME/goroots/gosource/bin 路徑去PATH,便可以在系統(tǒng)中使用原生的go了 :)

          搞定~


          瀏覽 36
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩精品AV无码一区二区三区 | 国产三级久久久精品麻豆三级 | 欧美天天干| 日本中文不卡 | 黄色视频在线观看免费 |