在没有CGO调用的情况下,交叉编译只需带上三个参数便可以实现

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build

或者加上可选参数

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags '-s -w --extldflags "-static -fpic"' main.go

CGO_ENABLED这个参数默认为1,开启CGO。需要指定为0来关闭,因为CGO不支持交叉编译。

GOOS 和 GOARCH 用来指定要构建的平台为Linux

可选参数-ldflags 是编译选项:

  • -s -w去掉调试信息,可以减小构建后文件体积,
  • --extldflags "-static -fpic"完全静态编译,这样编译生成的文件就可以任意放到指定平台下运行,而不需要运行环境配置。

交差编译示例:

GOOS=linux GOARCH=amd64 go build -ldflags "-s -w -extldflags '-static'" main.go

如果你是mac平台,可以用这个工具FiloSottile/musl-cross/musl-cross直接通过brew安装就可以使用

brew install FiloSottile/musl-cross/musl-cross

安装成功后,有多种编译器可以帮我们实现交叉编译,使用时只需在编译对应参数下指定就可以了。
示例

GOOS=linux GOARCH=amd64 CGO_ENABLED=1 CC=x86_64-linux-musl-gcc CGO_LDFLAGS="-static" go build -ldflags='-s -w' -a main.go

至于CC参数可使用ls /usr/local/opt/musl-cross/bin/查看