在没有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/
查看