在Windows上使用Golang:如何构建适用于Linux的应用程序?

8

我该如何在Windows上为Linux编译Go文件/项目?

在Linux上,可以通过一行命令实现:

GOOS=windows go build -o filename.exe codefile.go

我尝试使用Powershell在我的Linux服务器上进行类似的操作,但是只出现了一个错误:"-bash: ./gotest: cannot execute binary file: Exec format error"。
我尝试使用用户Env-vars设置GOOS = linuxGOARCH = amd64,并通过Powershell中的set GOOS = linux来实现,但我对Powershell了解不足 - go build命令运行没有错误并生成了文件。
有人能够解释一下如何在Windows(10 1709 x64)上,通过Powershell(或cmd)(通过VS Code)使用go-1.10进行一般性的操作吗?

我尝试过了,但只有 $env:GOOS="linux"; go build... 起作用。 - user8623833
1个回答

13

如果您的计算机上已经安装了Git Bash,请使用它并执行以下命令

env GOOS=linux go build -o filename

您可以通过以下方式设置整个命令会话的执行操作系统:

set GOOS=linux
go build -o filename

在同一版本的 Windows 10 上,对我有效,并且在 Ubuntu 16.04 LTS 上运行顺畅。


1
可以这样做,但请注意您不需要 env 部分。 - mklement0
没错。我这样使用的唯一原因是不会永久更改我的 Go 环境,只是为了构建暂时更改。 - chanioxaris
1
省略 env 部分也使得 GOOS 的定义成为 命令 作用域;也就是说,它只在被调用的子进程中生效 - 这是 POSIX 类 shell 的一个基本特性;可以通过 FOO=bar date; echo $FOO 进行验证。 - mklement0
1
哦,我不知道它是命令范围的。谢谢你指出来! - chanioxaris
这是在规范中定义的:「"简单命令" 是一个可选变量赋值和重定向序列,可以按任意顺序排列,后面可以跟随单词和重定向,以控制运算符结尾。」(强调我的)。 - kostix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接