golang初學:交叉編譯

快乐的凡人721發表於2024-05-02

go version go1.22.1 windows/amd64

Windows 11 + amd64

x86_64 x86_64 GNU/Linux

---

序章

golang 支援 跨平臺,支援的方式 是 在一個平臺 編譯其它平臺的可執行程式。

本文 介紹 Windows 11(開發主機) 上 編譯 Linux(目標主機) 上的可執行程式。

#go build

開發主機 和 目標主機 的架構相同:x86_64

執行

檢視 go 環境變數:

> go env

set GO111MODULE=on
set GOARCH=amd64

set GOHOSTARCH=amd64
set GOHOSTOS=windows

set GOOS=windows

……

修改其中的 GOOS 為 linux(全小寫),命令:

>go env -w GOOS="linux"

執行編譯:

>go build

編譯 成功,生成 web001 檔案——Linux 可執行的。

golang初學:交叉編譯

golang初學:交叉編譯

複製 web001 到 目標主機(scp 命令):

scp web001 username@iporhost:/target/directory

成功複製過去後,web001 是 不可執行的,使用 chmod 修改許可權即可:

# chmod +x web001

golang初學:交叉編譯

執行&測試 web001:

# nohup ./web001 &
# ps -ef | grep web
root 439426 439378 0 20:31 pts/1 00:00:00 ./web001

web001 是一個 web程式,使用 curl 測試介面,成功,不再贅述。

改名

將 web001 改名為 app001,執行,成功。

就這麼簡單?

TODO 除了 amd64(x86_64)外,還支援那些架構呢?看了 go help build 命令的內容,應該還支援下面的 os+晶片架構 組合:

golang初學:交叉編譯

Supported only on

linux/amd64, freebsd/amd64, darwin/amd64, darwin/arm64, windows/amd64,
linux/ppc64le and linux/arm64 (only for 48-bit VMA).

兩個 *asn 還提到了:linux/loong64(龍芯)。

還沒用過這些引數。

說明,介紹 GOOS、GOARCH 的 官方文件 今天看到過,但現在 找不到了。

命令小結

  • >go env -w GOOS="linux"
    >go build
    >scp web001 username@iporhost:/target/directory
  • # chmod +x web001
    # nohup ./web001 &
    # ps -ef | grep web
    # curl

---END---

本文連結:

https://www.cnblogs.com/luo630/p/18170501

ben釋出於部落格園

參考資料

1、go build 成不同環境的方法:mac、linux、windows
php-goland@瘋狂程式設計愛好者
已於 2022-10-10 17:20:11 修改
https://blog.csdn.net/qq_41672878/article/details/119410602

2、Win10系統下設定Go環境變數
https://www.cnblogs.com/yunfan1024/p/13497686.html

3、

ben釋出於部落格園

ben釋出於部落格園

相關文章