我在Windows机器上安装了Go 1.2,编写了一个虚拟程序,并将环境变量GOARCH
和GOOS
分别设置为“AMD64”和“linux”。
当我发出“go build
”命令时,收到错误:
go build runtime: linux/amd64 must be bootstrapped using make.bat
这是什么意思?
答案 0 :(得分:34)
它告诉您在使用它们之前需要构建所有工具。
如果您的Windows GOARCH是amd64,那么您可以通过运行这个小批量程序来“构建”所有必需的工具:
set GOARCH=amd64
set GOOS=linux
go tool dist install -v pkg/runtime
go install -v -a std
如果成功,那么你应该能够做你所描述的(只使用amd64,而不是AMD64 - 它区分大小写)。
如果您的Windows GOARCH是386,那么您需要先构建386工具。您需要为此下载mingw gcc。做什么user2714852说。
这里https://golang.org/wiki/WindowsCrossCompiling是关于linux的类似说明,也许你觉得它们很有帮助。
亚历
答案 1 :(得分:9)
我在从windows构建Linux时遇到了一些重大问题。最后,它非常简单。我会评论亚历克斯的帖子,但我不能,因为我是一个stackoverflow newb。
正如亚历克斯所说,设置environment variables。此必须以管理员身份完成(例如,右键单击"命令提示符"或" Powershell"快捷方式,然后单击"以管理员身份运行")
set GOARCH=amd64
set GOOS=linux
如果您不以管理员身份执行此操作,则变量将不会生效,您只需为OS&你现在所处的建筑。
我发现通过运行go env检查你的环境变量总是很好的,它给你了当前go环境变量的列表
go env
set GOARCH=amd64
set GOBIN=
set GOEXE=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOOS=linux
set GOPATH=T:\Projects\gopath
set GORACE=
set GOROOT=C:\Go
set GOTOOLDIR=C:\Go\pkg\tool\windows_amd64
set GCCGO=gccgo
set CC=gcc
set GOGCCFLAGS=-fPIC -m64 -fmessage-length=0
set CXX=g++
set CGO_ENABLED=0
set PKG_CONFIG=pkg-config
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
确保GOOS& GOARCH设置为您之前指定的值。
如果这一切都很好,你应该能够导航到包含你的go代码的目录,并从命令行运行:
go build
这将构建在环境变量中设置的系统和架构的包 一旦我终于解决了这个问题,我就遇到了一些其他问题,但这是与此问题无关的另一个问题。
答案 2 :(得分:8)
要设置PowerShell环境变量,请使用(不需要管理模式):
$env:GOOS = "linux"
比构建您的程序go build
更改后的环境变量仅在当前PowerShell窗口中存在。重新打开窗口后,所有内容都会重置。
答案 3 :(得分:1)
要交叉编译Go,首先你需要能够从源代码构建Go。要做到这一点,看起来你需要安装MinGW来获得gcc和其他工具。帮助就在https://code.google.com/p/go-wiki/wiki/WindowsBuild。
从那里开始,如果它像Linux交叉编译一样:
首先cd
到您的go\src
目录。如果您不确定它在哪里,请输入go env
,您会在输出中看到GOROOT="\some\dir\"
之类的行;只需cd \some\dir\src\
然后,设置GOOS=linux
和GOARCH=amd64
,键入.\make.bat
,它将构建针对Linux的Go编译器等版本。那你就不应该再犯这个错误了。
答案 4 :(得分:-1)
如果您使用 docker
,您可以为 docker image
构建构建一个 linux
。例如:
首先,您可以按如下方式准备一个DockerFile
:
FROM golang:1.15-alpine3.12 as builder
RUN mkdir /go/src/hello
WORKDIR /go/src/hello
#install nano, zip and git
RUN apk add nano zip git
COPY ./ ./
#build main
RUN GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o main
#zip main
RUN zip main.zip main
您可以使用 docker build -t yourname/hello .
构建图像之后必须从此图像导出 zip 文件:
docker run -it yourname / hello
将图像用作容器。docker ps
以查看容器 ID。docker cp YOUR_WORKING_CONTAINER_ID:/go/src/hello/main.zip .
以导出 zip 文件。这可能有很长的路要走,但它将允许您使用 docker
进行构建,而无需依赖于平台。下面是我开发的一个示例,用于使用 docker image
更新 golang lambda
函数(通过 aws-cli
)。