我在64位系统中编写了一个Go程序,但我想编译一个32位二进制文件!
64位二进制文件工作得很好但我不知道如何创建32位二进制文件。
我该怎么办?
答案 0 :(得分:20)
如果您构建了Go from source,那么您可以为任何CPU和OS构建任何其他编译器和库。如果你在windows / amd64上并且想要为windows / 386构建,那么这将构建为windows / 386编译所需的一切:
set GOARCH=386
cd %GOROOT%\src
make.bat --no-clean
完成后,您可以使用以下命令构建Windows / 386可执行文件:
set GOARCH=386
cd %YOUR_PROG_DIR%
go build
由于你在windows / amd64上,你甚至可以运行/测试你的windows / 386程序。在调用windows / 386的任何命令之前,请确保set GOARCH=386
。
有一点需要注意:这不支持cgo
,因此您无法使用任何使用cgo
的软件包。
答案 1 :(得分:7)
我在Windows 7 64位PC上实现此目的的方式(没有编译器编译)首先安装了windows amd64,然后download 32bit压缩并解压缩到第二个文件夹:
\go\go32
\go\go64
然后调整命令提示符窗口中的PATH
和GOROOT
,如下所示:
set PATH=\go\go32;%PATH%
set GOROOT=\go\go32\
然后我回去重新编译我之前使用64位编译的应用程序。如果您想定期切换,可以批量设置所有这些。
答案 2 :(得分:4)
好的,我终于解决了这个问题!这就是我如何做到的(我实际上失败了!)。
接下来将C:\ MinGW \ bin添加到PATH环境变量(我假设MinGW安装在C:\ MinGw中)
运行之前的下一步是构建/去安装是设置环境变量。
答案 3 :(得分:0)
我的Go版本是1.14,我将make.bat更改如下:
:: if "x%GOROOT_BOOTSTRAP%"=="x" set GOROOT_BOOTSTRAP=%HOMEDRIVE%%HOMEPATH%\Go1.4
将GOROOT_BOOTSTRAP更改为我的Go的根目录:
if "x%GOROOT_BOOTSTRAP%"=="x" set GOROOT_BOOTSTRAP=D:\Go
之后,我得到了这个错误
go tool dist: unknown $goarch 386
然后我设置GOOS和GOARCH
setlocal
set GOROOT=%GOROOT_BOOTSTRAP%
set GOOS=
set GOARCH=
set GOBIN=
set GO111MODULE=off
"%GOROOT_BOOTSTRAP%\bin\go.exe" build -o cmd\dist\dist.exe .\cmd\dist
endlocal
按照以下步骤设置GOOS AND GOARCH
setlocal
set GOROOT=%GOROOT_BOOTSTRAP%
set GOOS=windows
set GOARCH=386
set GOBIN=
set GO111MODULE=off
"%GOROOT_BOOTSTRAP%\bin\go.exe" build -o cmd\dist\dist.exe .\cmd\dist
endlocal
但是我遇到了错误,这不是32位程序。