具体怎么用呢,比如这个例子里是需要在Mac环境下编译能在Linux系统amd64架构下运行的执行文件,就得酱婶进行编译: CGO_ENABLED=0 GOOS=linux GOARCH=amd64...Go 的命令集是原生支持交叉编译的,使用方法也很简单,比如上面已经演示过的 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go 参数说明...Mac 下编译, Linux 或者 Windows 的可执行程序 # linux可执行程序 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go...# Windows 可执行程序 CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go Linux 下编译 , Mac 或者 Windows...GOARCH=amd64 go build main.go # Linux 去执行 SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64 go build
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...=0 SET GOOS=linux SET GOARCH=amd64 go build main.go GOOS:目标平台的操作系统(darwin、freebsd、linux、windows) GOARCH...:目标平台的体系架构(386、amd64、arm) 交叉编译不支持 CGO 所以要禁用它 上面的命令编译 64 位可执行程序,你当然应该也会使用 386 编译 32 位可执行程序 很多博客都提到要先增加对其它平台的支持
1 交叉编译命令 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...=0 SET GOOS=linux SET GOARCH=amd64 go build main.go 2 命令说明 GOOS:目标平台的操作系统(darwin、freebsd、linux、windows...) GOARCH:目标平台的体系架构(386、amd64、arm) 交叉编译不支持 CGO 所以要禁用它 关于 GOOS、GOARCH,我们可以在目标机上运行 go env 来查看。
$ cd /usr/local/go/src $ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 ./make.bash 如果是 Windows 则修改 GOOS 即可。...$ CGO_ENABLED=0 GOOS=windows GOARCH=amd64 ./make.bash (2) 现在可以编译 Linux 和 Windows 平台所需的执行文件了。...$ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build $ CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build 不过该方式暂时不支持...Go的时候,只是编译了本地系统需要的东西;而需要跨平台交叉编译,需要在Go中增加对其他平台的支持。...=windows GOARCH=amd64 go build -v
交叉编译依赖下面几个环境变量 GOARCH 目标平台(编译后的目标平台)的处理器架构(386、amd64、arm) GOOS 目标平台(编译后的目标平台)的操作系统(darwin、freebsd、linux...、windows) 各平台的GOOS和GOARCH支持情况 GOOS GOARCH OS version linux 386 / amd64 / arm >= Linux 2.6 darwin 386...如果你想在Windows 64位系统下运行 CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go # 如果你想在Linux 32位系统下运行...CGO_ENABLED=0 GOOS=linux GOARCH=386 go build test.go # 如果你想在Linux 64位系统下运行 CGO_ENABLED=0 GOOS=linux...GOARCH=amd64 go build test.go 上面命令中的 CGO_ENABLED = 0 表示设置CGO工具不可用; GOOS 表示程序构建环境的目标操作系统(Linux、Windows
=linux GOARCH=amd64 go build -ldflags='-s -w -extldflags "-static -fpic"' -o main-linux-amd64 main.go.../main-linux-amd64 输出Windows可执行文件: $ CGO_ENABLE=0 GOOS=windows GOARCH=amd64 go build -ldflags='-s -w -.../main-windows-amd64.exe 输出Mac可执行文件: # Intel $ CGO_ENABLE=0 GOOS=darwin GOARCH=amd64 go build -ldflags.../main-darwin-arm64 windows系统下: SET CGO_ENABLE=0 SET GOOS=linux SET GOARCH=amd64 go build -ldflags='-...默认为1开启CGO(不支持交叉编译),0表示关闭CGO GOARCH 表示CPU架构amd64(x86-64 普通家用电脑)、ARM GOOS 表示操作系统Linux、Windows、Darwin(Mac
GOOS表示目标操作系统,如linux、windows、darwin(macOS)等;GOARCH表示目标处理器架构,如386、amd64、arm、arm64等。...例如,如果你正在macOS系统上,想要编译一个Linux系统下运行的二进制程序,你可以设置GOOS为linux,GOARCH为amd64,然后运行go build命令: GOOS=linux GOARCH...三、交叉编译的注意事项 虽然Go的跨平台编译非常方便,但是还是有几点需要注意: C语言依赖:Go语言虽然可以轻松地跨平台编译,但是如果你的项目依赖C语言库,那么情况会变得复杂。...因为C语言库通常是针对特定平台编译的,所以在交叉编译时可能会遇到问题。解决方案通常是为目标平台构建C语言库,或者寻找纯Go的替代方案。.../bin/bash PLATFORMS="darwin/amd64 linux/amd64 windows/amd64" function go_build() { local goos=$1
在Windows下编译Mac, Linux 编译成 Mac SET CGO_ENABLED=0 SET GOOS=darwin SET GOARCH=amd64 go build xxxx.go 编译成...Linux SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64 go build xxxx.go 2.Mac下编译Linux, Windows 编译成...Linux CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build xxxx.go 编译成 Windows CGO_ENABLED=0 GOOS=windows...GOARCH=amd64 go build xxxx.go 3.Linux下编译Mac, Windows 编译成 Mac CGO_ENABLED=0 GOOS=darwin GOARCH=amd64...go build xxxx.go 编译成 Windows CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build xxxx.go 设置了这个以后速度会慢 ,
例如,要为 Linux 64 位编译,可以使用命令 export GOOS=linux 和 export GOARCH=amd64。 2....例如,要在 CentOS amd64 上为 Linux 64 位编译,可以使用命令 GOOS=linux GOARCH=amd64 go build -o hello-linux-amd64 main.go...} 使用以下命令,我们可以将这个简单的 Go 程序编译为多个目标平台的可执行文件: # 编译为 Linux 64 位可执行文件 GOOS=linux GOARCH=amd64 go build -o...hello-linux-amd64 main.go # 编译为 Windows 64 位可执行文件 GOOS=windows GOARCH=amd64 go build -o hello-windows-amd64....exe main.go # 编译为 ARM 64 位可执行文件 GOOS=linux GOARCH=arm64 go build -o hello-linux-arm64 main.go # 编译为
交叉编译需要你提前了解其他系统的类型和cpu架构,可以使用GOOS命令指定操作系统,使用GOARCH 命令指定 CPU架构。...假如我们需要编译Windows64位的caddy,则可以使用下面的命令: env GOOS=windows GOARCH=amd64 go build github.com/mholt/caddy/caddy...go build -o $output_name $package done 最后,我们应该检查构建可执行文件是否存在错误。...env GOOS=$GOOS GOARCH=$GOARCH go build -o $output_name $package if [ $?...结论 在本文中,您已经学习了如何使用Go语言从Git获取相关安装包,以为不同平台构建和交叉编译可执行文件。 感谢您的阅读!你学会了嘛?
Go 交叉编译 (跨平台编译) Go 支持的所有操作系统和体系结构组合 Go 中的 GOARCH 环境变量用于指定目标体系结构(Architecture),具体取决于要编译的目标平台。...这些组合通常以 GOOS/GOARCH 的形式列出,其中 GOOS 是操作系统的名称,GOARCH 是体系结构的名称。.../bin/bash export GOOS=linux #export GOARCH=mips641e export GOARCH=loong64 export GO111MODULE=on export.../bin/bash export GOOS=linux export GOARCH=mips64le export GO111MODULE=on export CGO_ENABLE=0 export.../bin/bash export GOOS=linux export GOARCH=sw64 export GO111MODULE=on export CGO_ENABLE=0 export PATH
原文转载自,助安社区(https://secself.com/)交叉编译程序交叉编译后就可以在各操作系统执行,非Java或Python依赖虚拟机,Go编译后不依赖虚拟机。...交叉编译大家要理解三个概念内核、架构和位,代码package mainimport "fmt"func main() {fmt.Println("https://secself.com")}内核:内核是操作系统的核心...Go支持的平台$GOOS $GOARCHdarwin 386 darwin amd64 darwin arm darwin arm64 dragonflyamd64...amd64 windows arm windows arm64 Windows编译windows平台可执行文件$ GOOS=windows GOARCH=amd64 go build...test.goLinux编译Linux平台可执行文件$ GOOS=linux GOARCH=amd64 go build test.goMac$ GOOS=darwin GOARCH=amd64 go
今天继续关于Go开发经验的分享,这次的主题是关于Go的交叉编译和条件编译,伴随着我对自己打不过、惹不起的壕同事小张还有运维们的碎碎念。...简单来说,如果文件名包含_GOOS.go后缀,那么这个源码文件只会在对应的平台被编译。其他平台会忽略这个文件。另一种约定是_GOARCH.go。...这两种后缀可以组合起来,但要保证顺序,正确的格式是_GOOS_GOARCH.go,错误的格式是_GOARCH_GOOS.go。...=0 GOOS=windows GOARCH=amd64 go build main.go 在Mac系统执行完上面的命令就会编译生成软件包在Windows系统上的可执行文件(.exe文件) 如果是Windows...下编译 Mac 64位可执行程序,用: SET CGO_ENABLED=0 SET GOOS=darwin SET GOARCH=amd64 go build main.go 总结 事实上,除了用于
交叉构建 确定触发条件之后,下一个任务就是构建了,golang 项目通常需要进行多平台的交叉编译,在 Github Action 中可以用 Matrix 特性做个循环: strategy:...matrix: include: - goarch: amd64 goos: linux - goarch: amd64...goos: darwin - goarch: arm64 goos: linux - goarch: arm64...}} 这里针对 arm64、amd64 和 Linux、Darwin 的组合进行了交叉编译: 使用 checkout@master 获取代码 setup-go@v2 设置 golang 环境,并在 with...goarch:amd64 goos:darwin] [Build Release/release linux/amd64-2] Start image=catthehacker/ubuntu:act-latest
跨平台编译 跨平台编译,也叫交叉编译,我可以在win平台上,编译成linux平台可执行的文件。...Windows下编译Mac平台64位可执行程序: SET CGO_ENABLED=0 SET GOOS=darwin SET GOARCH=amd64 go build Mac 下编译 Linux 和...Windows平台 64位 可执行程序: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build CGO_ENABLED=0 GOOS=windows GOARCH...=amd64 go build Linux 下编译 Mac 和 Windows 平台64位可执行程序: CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build CGO_ENABLED...=0 GOOS=windows GOARCH=amd64 go build 结尾 我是码农星期八,本文到此就先告一段落咯。
在CMD命令行中编译 设置Linux编译环境 SET CGO_ENABLED=0 set GOARCH=amd64 set GOOS=linux // 开始编译 go build -o ....Linux编译环境 $env:CGO_ENABLED="0" $env:GOOS="linux" $env:GOARCH="amd64" // 开始编译 go build -o ..../main.go 一、CGO_ENABLED 作用: 用于标识(声明) cgo 工具是否可用 意义: 存在交叉编译的情况时,cgo 工具是不可用的。...在标准 go 命令的上下文环境中,交叉编译意味着程序构建环境的目标计算架构的标识与程序运行环境的目标计算架构的标识不同,或者程序构建环境的目标操作系统的标识与程序运行环境的目标操作系统的标识不同 关闭...windows amd64 OS X 32 位 darwin 386 OS X 64 位 darwin amd64 Linux 32 位 linux 386 Linux 64 位 linux amd64
跨平台编译 跨平台编译,也叫交叉编译,我可以在win平台上,编译成linux平台可执行的文件。...Windows下编译Mac平台64位可执行程序: SET CGO_ENABLED=0SET GOOS=darwinSET GOARCH=amd64go build Mac 下编译 Linux 和 Windows...平台 64位 可执行程序: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go buildCGO_ENABLED=0 GOOS=windows GOARCH=amd64 go...build Linux 下编译 Mac 和 Windows 平台64位可执行程序: CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go buildCGO_ENABLED...=0 GOOS=windows GOARCH=amd64 go build 结尾 我是码农星期八,本文到此就先告一段落咯。
使用 buildx 命令, 实现 交叉编译 使用 clean 命令清空编译结果。 ## 默认变量, 获取当前 go 的环境变量 GOOS ?...= $(shell go env GOOS) GOARCH ?...= $(shell go env GOARCH) ## build 在指定环境变异 build: go build -o out/greeting-$(GOOS)-$(GOARCH) . ## 通过指定环境变量..., 执行交叉编译 buildx: GOOS=linux GOARCH=amd64 make build GOOS=linux GOARCH=arm64 make build GOOS=darwin...GOARCH=amd64 make build GOOS=darwin GOARCH=arm64 make build ## 清理编译结果 clean: rm -rf out/ 一个最基本命令结构就这样完成了
复制 这里有个优雅的点:如果没有指定-a选项,则默认使用x86_64架构,方便与已有编译脚本的融合和兼容。如果传入的架构参数不支持,脚本会输出错误信息并退出。...程序 wget https://example.com/myapp.tar.gz tar -xzf myapp.tar.gz cd myapp GOOS=linux GOARCH=amd64 go build...我们可以使用以下命令来进行编译: CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o myprogram-linux-amd64 main.go CGO_ENABLED...=1 GOOS=linux GOARCH=386 go build -o myprogram-linux-386 main.go CGO_ENABLED=1 GOOS=windows GOARCH=amd64...其中,GOOS=windows表示编译Windows操作系统的程序,GOARCH=amd64表示编译x64架构的程序。
领取专属 10元无门槛券
手把手带您无忧上云