在M1環(huán)境中交叉編譯有CGO 的 linux 可執(zhí)行文件

項目背景:confluent-kafka-go 客戶端 接入項目,
https://github.com/confluentinc/confluent-kafka-go/blob/master/README.md
根據(jù)這個文檔說的,macOS 可以直接編譯生成 linux 運行的可執(zhí)行文件,
執(zhí)行:CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
可是會報

image.png

后來發(fā)現(xiàn) librdkafka 是基于C的,所以需要開啟CGO_ENABLED
執(zhí)行:CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build
還是會報:


image.png

經過搜索發(fā)現(xiàn),os本身系統(tǒng)庫不兼容的問題,需要安裝linux的編譯環(huán)境

執(zhí)行:brew install FiloSottile/musl-cross/musl-cross
安裝完成以后執(zhí)行:
CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build
還是不行:需要指定環(huán)境變量
執(zhí)行:CGO_ENABLED=1 GOOS=linux GOARCH=amd64 CC=x86_64-linux-musl-gcc CXX=x86_64-linux-musl-g++ go build
報了一大堆看不懂的錯誤,然后又花了很久時間去查,沒有結果。。。


image.png

最終我又回到官方文檔,


image.png

雖然剛開始是macOS,但是現(xiàn)在我剛剛就是搭建了musl libc這個編譯環(huán)境,
所以執(zhí)行:
CGO_ENABLED=1 GOOS=linux GOARCH=amd64 CC=x86_64-linux-musl-gcc CXX=x86_64-linux-musl-g++ go build -tags musl
終于成功了

把可執(zhí)行文件上傳到服務器去執(zhí)行,報:
No such file or directory

我以為我的文件名寫錯了,以為我的命令寫錯了,以為.....
最后又回到這里


image.png

安裝環(huán)境:
wget https://copr.fedorainfracloud.org/coprs/ngompa/musl-libc/repo/epel-7/ngompa-musl-libc-epel-7.repo -O /etc/yum.repos.d/ngompa-musl-libc-epel-7.repo
yum install -y musl-libc-static

在服務器上安裝環(huán)境之后,終于成功啟動了

但其實我差不多花了一天的時間才解決掉這個問題

繼續(xù)下一個問題。。。。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容