Go 交叉编译 (跨平台编译)
Go 交叉编译Golang 支持交叉编译,在一个平台上生成另一个平台的可执行程序一 Mac 下编译 Linux 和 Windows 64位可执行程序CGO_ENABLED=0GOOS=linuxGOARCH=amd64go build main.goCGO_ENABLED=0GOOS=windowsGOARCH=amd64go build main.go二 Linux 下编译 Mac 和 Win
Go 交叉编译
Golang 支持交叉编译,在一个平台上生成另一个平台的可执行程序
一 Mac 下编译 Linux 和 Windows 64位可执行程序
CGO_ENABLED=0
GOOS=linux
GOARCH=amd64
go build main.go
CGO_ENABLED=0
GOOS=windows
GOARCH=amd64
go build main.go
二 Linux 下编译 Mac 和 Windows 64位可执行程序
CGO_ENABLED=0
GOOS=darwin
GOARCH=amd64
go build main.go
CGO_ENABLED=0
GOOS=windows
GOARCH=amd64
go build main.go
三 Windows 下编译 Mac 和 Linux 64位可执行程序
SET CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build main.go
SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build main.go
编译AIX:
SET CGO_ENABLED=0
SET GOOS=aix
SET GOARCH=ppc64
go build
GOOS:目标平台的操作系统(darwin、freebsd、linux、windows) GOARCH:目标平台的体系架构(386、amd64、arm) 交叉编译不支持 CGO 所以要禁用它
Go交叉编译需要设置以下环境变量:
CGO_ENABLED=0
GOOS=darwin
GOARCH=amd64
其中,GOOS是目标平台的操作系统,支持以下操作系统:
aix
android
darwin
dragonfly
freebsd
hurd
illumos
js
linux
nacl
netbsd
openbsd
plan9
solaris
windows
zos
GOARCH是目标平台的架构,一般为下列值:
386
amd64
amd64p32
arm
armbe
arm64
arm64be
ppc64
ppc64le
mips
mipsle
mips64
mips64le
mips64p32
mips64p32le
ppc
riscv
riscv64
s390
s390x
sparc
sparc64
wasm
配置好环境变量后,就可以运行go build了
去除调试信息
编译成可执行文件后,如果报错的话,可执行文件还是会携带上编译该文件的电脑上的路径信息,如:
panic: XXXXXXXXXX.
goroutine 1 [running]:
main/test(0xc000060240, 0x232, 0xc000074120, 0x82, 0x0, 0x0, 0xc00000a5a0, 0x2a, 0x1, 0x0, …)
E:/program/Go/main.go:31 +0x35f
main.main()
E:/program/Go/main.go:49 +0x9b8
如果想去除这些调试信息,可以在运行go build时指定如下参数:
-ldflags ‘-s -w’ -gcflags=‘all=-trimpath= P W D ′ − a s m f l a g s = ′ a l l = − t r i m p a t h = {PWD}' -asmflags='all=-trimpath= PWD′−asmflags=′all=−trimpath={PWD}’
如:
go build -ldflags ‘-s -w’ -gcflags=‘all=-trimpath= P W D ′ − a s m f l a g s = ′ a l l = − t r i m p a t h = {PWD}' -asmflags='all=-trimpath= PWD′−asmflags=′all=−trimpath={PWD}’ main.go
引用
更多推荐
所有评论(0)