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= PWDasmflags=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= PWDasmflags=all=trimpath={PWD}’ main.go

引用

Logo

智屏生态联盟致力于大屏生态发展,利用大屏快应用技术降低开发者开发、发布大屏应用门槛

更多推荐