Golang 的跨平台編譯

Golang 可在任何平台上做 cross compile

所以可以在MacOSX編譯出Linux的可執行檔

只要給定編譯平台的環境變數

go build時就會依照環境變數

編譯出相對應的平台

env GOOS=target-OS GOARCH=target-architecture go build package-import-path

支援的 target os 跟 target architecture 如下表

`GOOS` - Target Operating System `GOARCH` - Target Platform
`android` `arm`
`darwin` `386`
`darwin` `amd64`
`darwin` `arm`
`darwin` `arm64`
`dragonfly` `amd64`
`freebsd` `386`
`freebsd` `amd64`
`freebsd` `arm`
`linux` `386`
`linux` `amd64`
`linux` `arm`
`linux` `arm64`
`linux` `ppc64`
`linux` `ppc64le`
`linux` `mips`
`linux` `mipsle`
`linux` `mips64`
`linux` `mips64le`
`netbsd` `386`
`netbsd` `amd64`
`netbsd` `arm`
`openbsd` `386`
`openbsd` `amd64`
`openbsd` `arm`
`plan9` `386`
`plan9` `amd64`
`solaris` `amd64`
`windows` `386`
`windows` `amd64`

所以要在 Mac 上編譯出 Linux 的可執行檔

只需要如下指令:

GOOS=linux GOARCH=amd64 go build

這時候我們用 file 查看檔案屬性會發現是一個 LSB executable

ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, with debug_info, not stripped

看更多