Golang 的程式寫好後,一般在 amd64 的環境編譯、執行都很簡單,但是遇到 ARM 的就需要另外指定一下。
go build example.go # 產生 example 執行檔,丟到 ARM 的機器上執行,會如下述訊息:
- $ ./example
-bash: ./example: cannot execute binary file: Exec format error
Golang 編譯給 Raspberry PI (ARM) 執行的程式
Go 官方文件有寫到,若要 Compile 給 ARM,有幾個參數要設定
設定 $GOOS 和 $GOARCH 的環境參數 (上述文件找 「$GOOS and $GOARCH」和 「$GOARM」的設定參數)
GOOS、GOARCH、GOARM 參數設定值
- $GOOS:linux
- $GOARCH:arm
- $GOARM
- GOARM=5: use software floating point; when CPU doesn't have VFP co-processor
- GOARM=6: use VFPv1 only; default if cross compiling; usually ARM11 or better cores (VFPv2 or better is also supported)
- GOARM=7: use VFPv3; usually Cortex-A cores
Go build 的參數
- $ GOOS=linux GOARCH=arm GOARM=7 go build example.go # build for ARM
- $ GOOS=linux GOARCH=arm GOARM=7 go build -v example.go # 想看詳細可加上 -v
- $ scp example raspberrypi.example.com: # 再去執行即可