游乐游手机版
首页/编程语言/文章详情

Ubuntu系统下Golang跨平台交叉编译完整指南

时间:2026-05-06 21:05
在Ubuntu环境下使用Golang进行交叉编译 想在Ubuntu上把Go程序编译成能在其他系统上直接运行的文件吗?这事儿其实比想象中简单。交叉编译——也就是在一个平台生成另一个平台可执行文件的过程——在Go语言里已经变得相当顺手。下面咱们就一步步来看具体怎么操作。 第一步:安装Golang 如果系

在Ubuntu环境下使用Golang进行交叉编译

想在Ubuntu上把Go程序编译成能在其他系统上直接运行的文件吗?这事儿其实比想象中简单。交叉编译——也就是在一个平台生成另一个平台可执行文件的过程——在Go语言里已经变得相当顺手。下面咱们就一步步来看具体怎么操作。

第一步:安装Golang

如果系统里还没装Go,得先把这个基础工作做好。直接去Golang的官方网站(https://golang.org/dl/)下载适用于Ubuntu的版本就行。安装过程很常规,跟着提示走一般不会出问题。

第二步:设置环境变量

装好之后,关键是要确保GOPATHGOROOT这两个环境变量设置对了。打开终端,用下面这两条命令就能立刻看到它们的当前值:

echo $GOPATH
echo $GOROOT

如果发现还没设置,或者值不对,那就得动手配置一下。通常的做法是把它们加到~/.bashrc这个文件里,改完别忘了运行source ~/.bashrc让配置立刻生效。

第三步:编写Go代码

环境准备好了,总得有个程序来编译吧。创建一个简单的Go文件试试水,比如就叫hello.go

package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}

看,就是一个最基础的打印“Hello, World!”的程序。

第四步:执行交叉编译

重头戏来了。Go工具链的便利在这里体现得淋漓尽致:只需要通过GOOSGOARCH这两个环境变量告诉它目标平台就行。比如说,你想编译一个能在64位Windows上跑的程序,命令是这样的:

GOOS=windows GOARCH=amd64 go build -o hello.exe hello.go

执行之后,当前目录下就会多出一个hello.exe文件。没错,在Linux系统里生成了一个标准的Windows可执行文件。

第五步:测试与运行

最后一步,把这个生成好的hello.exe文件拷贝到你的Windows机器上,双击运行。如果看到命令行里弹出“Hello, World!”,那就大功告成了。

常见的目标平台组合

为了方便大家,这里整理了一份常用的平台组合清单,编译时直接套用就行:

  • 编译给32位Windows用:GOOS=windows GOARCH=386
  • 编译给64位Windows用:GOOS=windows GOARCH=amd64
  • 编译给macOS(64位)用:GOOS=darwin GOARCH=amd64
  • 编译给Linux(32位ARM,比如树莓派)用:GOOS=linux GOARCH=arm
  • 编译给Linux(64位ARM)用:GOOS=linux GOARCH=arm64

基本上,只要根据你的目标设备,灵活替换上面命令里的GOOSGOARCH值,就能轻松搞定绝大多数平台的交叉编译需求。整个过程是不是清晰又直接?

来源:https://www.yisu.com/ask/58439845.html
上一篇Ubuntu系统下Golang程序打包自动化脚本编写指南 下一篇Ubuntu系统下Go语言编译缓存配置与使用指南
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
如何在Go中安全地创建和使用time.Ticker最佳实践指南
编程语言 · 2026-07-06

如何在Go中安全地创建和使用time.Ticker最佳实践指南

在Go中,time Ticker的创建位置直接影响并发安全。最佳实践是在goroutine外创建或完全限定在单个goroutine内使用,严禁无保护跨goroutine共享。无论采用哪种方式,都必须在使用完毕后调用Stop()释放底层定时器资源,防止goroutine泄露。停止后的Ticker不应再调用Reset以避免竞态。

Go跨文件cgo结构体类型不兼容的解决方案
编程语言 · 2026-07-06

Go跨文件cgo结构体类型不兼容的解决方案

cgo为每个Go包生成独立的C命名空间,导致跨文件使用同一C结构体时类型不兼容。解决方案是在中心包中定义Go封装类型(如typePointC point_t),并将所有构造、访问和业务逻辑封装其中,其他包仅引用Go类型,避免直接暴露C类型。

Go语言有符号整数二进制补码的正确输出方法
编程语言 · 2026-07-06

Go语言有符号整数二进制补码的正确输出方法

Go语言fmt Printf的%b格式对负数输出带负号的绝对值二进制,而非底层补码位模式。需注意,通过将相同位宽的有符号整数转换为无符号类型(例如将int8转为uint8),可获取真实的二进制补码比特序列,如-5输出11111011,即其补码。

Python列表按出现顺序批量替换重复字符串
编程语言 · 2026-07-06

Python列表按出现顺序批量替换重复字符串

Python列表遍历中,使用计数器对重复字符串(如“latest png”)按出现顺序依次替换为带递增编号的新字符串(如“latest1 png”),保持原列表不变。该方法时间复杂度O(n),无需额外库,严格匹配避免误改,不修改原始列表。

Go语言中如何正确读取io.Reader避免重复与内存污染
编程语言 · 2026-07-06

Go语言中如何正确读取io.Reader避免重复与内存污染

Go开发者使用io Reader Read()手动读取HTTP响应体时,因忽略实际读取字节数n和未正确处理io EOF,导致内容重复、空字节污染等问题。必须使用buf[:n]追加有效数据,将io EOF视为正常终止信号,并检查其他错误,从而避免内存污染与panic风险。