在Macbook Pro 2019上针对Amazon AWS EC2交叉编译Go二进制文件

时间:2020-09-06 22:53:19

标签: zsh

我需要在Macbook Pro 2019上针对Amazon AWS EC2 Linux实例编译Go二进制文件。这是屏幕截图(我在很多地方都找不到答案的地方进行搜索):

enter image description here

我在MacBook Pro上尝试了以下命令:

sudo $GOOS=linux GOARCH=amd64 go build -o main

我得到了错误:

zsh:找不到Linux

enter image description here

我编写了此命令来获取可以交叉编译的平台列表,您可以看到Linux也有一个选项,但它会引发错误:

enter image description here

3 个答案:

答案 0 :(得分:2)

删除GOOS前面的$。

GOOS = linux GOARCH = amd64转到构建-o main

答案 1 :(得分:1)

我认为您应该在GOOS之前不带$进行测试

sudo GOOS=linux GOARCH=amd64 go build -o main

答案 2 :(得分:0)

尽管罗素·史密斯(Russell Smith)和艾伦·雅克(Allan Jacquet)的答案正确地解释了如何正确执行操作,但他们没有解释,为什么,您确切地得到了该错误消息。

您被两个zsh属性共同作用所困扰:参数扩展和(=不太明显)'='-扩展。

在您的命令中

sudo $GOOS=linux GOARCH=amd64 go build -o main

zsh首先替换参数。您在这里有一个参数替换$GDOS,而zsh将其替换为变量GDOS的内容。假设此变量目前不存在或为空,则导致该行

sudo =linux GOARCH=amd64 go build -o main

下一步是“ =”-扩展,因为此行中的第二个单词以等号开头。通常,单词=something在PATH中搜索名为 something 的程序,并将该单词替换为完整路径名。您可以通过执行echo =cat(在我的平台上输出/usr/bin/cat)来尝试使用此功能。

由于PATH中没有名为linux的程序,因此命令失败。

顺便说一句,如果您已启用

set -u

在您的shell中,zsh会抱怨您使用的变量GDOS尚无值;这将使您很容易发现错误。