1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 1535字,需瀏覽 4分鐘

         ·

        2020-12-17 01:33

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

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

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

        安裝go 1.15

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

        說是安裝,但其實只需要下載就可以了:

        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源碼倉庫:

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

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

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

        預(yù)編譯darwin/arm64

        要編譯go的話,需要先預(yù)編譯 bootstrap 響應(yīng)的工具鏈,這個工具鏈本身也是需要是arm64版,不然最后make出來的還會是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 ,這是因為我們的go 1.15是amd64版,直接在m1 mac中運行時需要依賴 rosetta 2,而目前似乎rosetta 2對于go的協(xié)程異步搶占還有bug,因此需要關(guān)閉;否則編譯時會死鎖并出現(xiàn)錯誤:

        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
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            好爽好紧宝贝别夹免费 | 免费看草逼网站 | 精品人妻无码一区二区三区91麻豆 | 三上悠亚在线视频 | 国产丰满精东videossex | 三级黄视频 | 国产无码久久久 | 国产chinese中国xxxx | 成人AV免费观看 | 天天综合天天日 |