Golang 二进制文件是可移植的吗?

Posted

技术标签:

【中文标题】Golang 二进制文件是可移植的吗?【英文标题】:Are Golang binaries portable? 【发布时间】:2016-02-25 15:38:49 【问题描述】:

假设我主要是 Linux 用户,但我正在用 Go 开发一个我想成为跨平台的应用程序。我已经四处搜索,但似乎找不到可以解决以下问题的信息:

    如果我在我的 amd64 Ubuntu 系统上go install 一个二进制文件,它是否也适用于其他人的 64 位 Ubuntu/Debian 系统? 如何使用 go install 构建一个 x86_64 二进制文件,该二进制文件也可以在 32 位 Debianlikes 上开箱即用地运行? 如果我必须使用 Windows 来制作可以在 Windows 上运行的二进制文件,我如何才能确保即使我的 Windows 系统是 64 位,也可以为 x86_64 构建可执行文件?

我的问题实际上归结为“go 的链接器/编译器的静态/可移植性如何?”

【问题讨论】:

我不确定你在问什么。二进制文件可在具有相同操作系统和架构的系统之间移植。除非您另有说明,否则 Go 会为您的主机 GOOS 和 GOARCH 构建二进制文件。您不能将 64 位二进制文​​件在 32 位系统上运行。 这不是我创建跨平台二进制文件的经验。 回答您的问题:“一点也不。”很简单,因为这是不可能的。没有编译器/链接器/加载器/工具链可以做到这一点。谷歌交叉编译,这对 Go 来说是微不足道的。 如果这不是您的经验,那么您需要向我们展示您遇到的问题。问题“go 的链接器/编译器的静态/可移植性如何?”没有多大意义。 离题。这个工具让你的生活更轻松github.com/mitchellh/gox 【参考方案1】:
    是的,它会的;基本上所有为 64 位 Linux 编译的二进制文件都是如此,而不仅仅是那些用 Go 编写的(除了 Go 不依赖的共享库) 您可以在构建之前设置GOOSGOARCH 环境变量:GOOS=windows GOARCH=386 go build(或go install 或其他)等 默认情况下,将为您正在运行的系统构建二进制文件,但这不是必需的 - 请参阅 2

【讨论】:

以上是关于Golang 二进制文件是可移植的吗?的主要内容,如果未能解决你的问题,请参考以下文章

Golang的交叉编译问题

Golang的交叉编译问题

Golang标准库——runtime

静态库可移植性

利用Golang玩转WebAssembly

ios 应用商店错误:被分析的二进制文件必须是可执行文件