如何在Linux上交叉编译Go项目以生成可在Windows上运行的可执行文件?
如何在Linux上交叉编译Go项目以生成可在Windows上运行的可执行文件?
要在Linux上构建Windows程序,您需要将环境变量GOOS
设置为Windows
,将GOARCH
设置为amd64
。
在Bash或ZSH上:
% GOOS=windows GOARCH=amd64 go build
如果您的程序包需要CGO
,则需要使用mingw-w64编译器:
sudo apt-get install gcc-multilib
sudo apt-get install gcc-mingw-w64
GOOS=windows GOARCH=386 \
CGO_ENABLED=1 CXX=i686-w64-mingw32-g++ CC=i686-w64-mingw32-gcc \
go build
在生产过程中,您可能想要构建支持 Windows 架构的 go 程序,但这并不总是容易的,以下是一份指南,可以帮助您为 Windows 构建 go 程序。
Cgo 是 go 的一个元素,它允许 Go 包调用 C 代码。
但是,无论您是否使用 CGO,并不像“我是否调用了 C 代码”这么简单,因为虽然您可能没有在 Go 程序中调用 C 代码,但您正在使用的某个包可能会这样做。
为了找出这一点,最简单的方法是先尝试不使用 CGO,如果不起作用,则尝试第二个选项。(但如果您愿意,也可以尝试这个)
如果您不需要 CGO,则将 go 程序构建到另一个平台非常简单,因为 go 原生支持跨平台编译。 您只需要执行以下操作:
x64
#Compile your go program to the windows x64 platform
env GOOS=windows GOARCH=amd64 go build package-import-path
x32
#Compile your go program to the windows x32 platform
env GOOS=windows GOARCH=386 go build package-import-path
提示:由于Go原生支持交叉编译,因此您可以轻松地将程序构建到其他平台上,请进一步阅读这里
如果您需要使用CGO,则构建您的程序会稍微复杂一些,因为C不支持本地跨平台编译。但是不用担心!使用MinGW64项目仍然非常容易。
由于我们将使用mingw64来构建项目,因此我们需要确保已安装mingw。如果没有安装,可以按照以下方式安装:
在Ubuntu上,只需运行以下命令:
sudo apt-get install gcc-mingw-w64
在 Fedora 上只需运行:
sudo dnf install mingw64-gcc
现在我们已经满足了要求,可以开始构建项目了。
在 Windows x64 架构上构建程序,请运行:
GOOS=windows GOARCH=amd64 CGO_ENABLED=1 CXX=x86_64-w64-mingw32-g++ CC=x86_64-w64-mingw32-gcc go build package-import-path
要在 Windows x32 架构上构建您的程序,请运行以下命令:
GOOS=windows GOARCH=386 CGO_ENABLED=1 CXX=i686-w64-mingw32-g++ CC=i686-w64-mingw32-gcc go build package-import-path
/usr/bin/x86_64-w64-mingw32-ld: cannot find -lstdc++
。有任何想法是什么意思吗? - Carlos Bermudezdnf provides lstdc++.so
并安装提供它的软件包。(我假设你正在使用Fedora) - Kalitsune-lstdc++.so
作为参数。 - Kalitsune
GOOS=Windows
,但没有任何影响,直到我注意到你将其设置为GOOS=windows
。 - DanCGO
后,GOARCH 是386
?如果我想要构建amd64
的话怎么办? - Elie G.x86_64-w64-mingw32-gcc
和x86_64-w64-mingw32-g++
来编译amd64
。 - Frediano Ziglio