Golang:交叉编译到Linux、macOS、windows并运行

简介: Golang:交叉编译到Linux、macOS、windows并运行

Golang可以直接编译成不同平台的可执行文件,并且直接运行,很方便第三方使用者部署运行

目录

项目结构

$ tree
.
├── Makefile
└── src
    └── hello.go

项目很简单,一个Hello 程序,仅为了演示打包到不同平台并执行的效果

hello.go

package main
import "fmt"
func main() {
    fmt.Printf("hello\n")
}

为了简化命令行编写,采用Makefile 文件整合命令

Makefile

# 编译到 Linux
.PHONY: build-linux
build-linux:
    CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o ./build/hello-linux ./src/hello.go 
# 编译到 macOS
.PHONY: build-darwin
build-darwin:
    CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o ./build/hello-darwin ./src/hello.go
# 编译到 windows
.PHONY: build-windows
build-windows:
    CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o ./build/hello-windows.exe ./src/hello.go 
# 编译到 全部平台
.PHONY: build-all
build-all:
    make clean
    mkdir -p ./build
    make build-linux
    make build-darwin
    make build-windows
.PHONY: clean
clean:
    rm -rf ./build

编译成可执行文件

运行编译命令

$ make build-all
$ ls -lh ./build/
1.8M  2 12 13:05 hello-darwin
1.7M  2 12 13:05 hello-linux
1.9M  2 12 13:05 hello-windows.exe

可以看到,生成了三个平台的可执行文件,平均大小1.8M

运行测试

分别到三个平台执行

1、Mac OS

$ sw_vers 
ProductName:    Mac OS X
ProductVersion: 10.14.4
BuildVersion:   18E2035
$ ./hello-darwin
hello

2、Linux

$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
$ ./hello-linux
hello

3、Windows (终端使用MINGW64)

$ systeminfo
OS Name:    Microsoft Windows 10 专业版
OS Version: 10.0.19045 N/A Build 19045
$ ./hello-windows.exe
hello

查看支持的平台

$ go tool dist list
aix/ppc64
android/386
android/amd64
android/arm
android/arm64
darwin/amd64
darwin/arm64
dragonfly/amd64
freebsd/386
freebsd/amd64
freebsd/arm
freebsd/arm64
illumos/amd64
ios/amd64
ios/arm64
js/wasm
linux/386
linux/amd64
linux/arm
linux/arm64
linux/loong64
linux/mips
linux/mips64
linux/mips64le
linux/mipsle
linux/ppc64
linux/ppc64le
linux/riscv64
linux/s390x
netbsd/386
netbsd/amd64
netbsd/arm
netbsd/arm64
openbsd/386
openbsd/amd64
openbsd/arm
openbsd/arm64
openbsd/mips64
plan9/386
plan9/amd64
plan9/arm
solaris/amd64
windows/386
windows/amd64
windows/arm
windows/arm64

参考

Golang 在 Mac、Linux、Windows 下如何交叉编译


相关文章
|
Linux 虚拟化 iOS开发
VMware Fusion 13.6.4 OEM BIOS 2.7 - 在 macOS 中运行 Windows 虚拟机的最佳方式
VMware Fusion 13.6.4 OEM BIOS 2.7 - 在 macOS 中运行 Windows 虚拟机的最佳方式
1571 3
|
Ubuntu Linux 编译器
linux下交叉编译licensecc
通过本文的步骤,您可以在Linux环境下成功交叉编译LicenseCC。本文详细介绍了环境准备、工具链安装、源代码下载、CMake配置、编译和验证的全过程。希望这些内容对您的学习和工作有所帮助。
568 62
|
Ubuntu Linux 编译器
linux下交叉编译licensecc
通过本文的步骤,您可以在Linux环境下成功交叉编译LicenseCC。本文详细介绍了环境准备、工具链安装、源代码下载、CMake配置、编译和验证的全过程。希望这些内容对您的学习和工作有所帮助。
369 5
|
Ubuntu Linux Go
golang编译成Linux可运行文件
本文介绍了如何在 Linux 上编译和运行 Golang 程序,涵盖了本地编译和交叉编译的步骤。通过这些步骤,您可以轻松地将 Golang 程序编译成适合 Linux 平台的可执行文件,并在目标服务器上运行。掌握这些技巧,可以提高开发和部署 Golang 应用的效率。
3454 14
|
机器学习/深度学习 人工智能 Ubuntu
|
存储 数据可视化 Java
震惊!如何在linux下部署项目,部署/运行jar包 超详细保姆级教程!
如何在Linux系统下部署和运行Java项目jar包,包括传输文件到Linux、使用nohup命令运行jar包、查看端口状态、杀死进程和查看项目运行状态,以及如何解决“没有主清单属性”的错误。
3539 2
震惊!如何在linux下部署项目,部署/运行jar包 超详细保姆级教程!
|
Linux Shell
6-9|linux查询现在运行的进程
6-9|linux查询现在运行的进程
|
小程序 iOS开发 MacOS
MacOS环境-手写操作系统-44-运行简单的程序
MacOS环境-手写操作系统-44-运行简单的程序
261 0
|
存储 传感器 Linux
STM32微控制器为何不适合运行Linux系统的分析
总的来说,虽然技术上可能存在某些特殊情况下将Linux移植到高端STM32微控制器上的可能性,但从资源、性能、成本和应用场景等多个方面考虑,STM32微控制器不适合运行Linux系统。对于需要运行Linux的应用,更适合选择ARM Cortex-A系列处理器的开发平台。
1082 0
|
关系型数据库 MySQL 数据库
【Mac os系统】安装MySQL数据库
本文详细介绍了在Mac OS系统上安装MySQL数据库的步骤,包括下载、安装、配置环境变量、启动服务、授权设置以及解决常见问题,并提供了一些常用的MySQL命令。
2314 0
【Mac os系统】安装MySQL数据库