在64位系统上编译32位二进制文​​件

时间:2013-05-14 20:59:43

标签: windows go

我在64位系统中编写了一个Go程序,但我想编译一个32位二进制文​​件!

64位二进制文​​件工作得很好但我不知道如何创建32位二进制文​​件。

我该怎么办?

4 个答案:

答案 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

然后调整命令提示符窗口中的PATHGOROOT,如下所示:

set PATH=\go\go32;%PATH%
set GOROOT=\go\go32\

然后我回去重新编译我之前使用64位编译的应用程序。如果您想定期切换,可以批量设置所有这些。

答案 2 :(得分:4)

好的,我终于解决了这个问题!这就是我如何做到的(我实际上失败了!)。

  • 我做的第一件事就是从http://www.mingw.org/下载GCC。
  • 接下来将C:\ MinGW \ bin添加到PATH环境变量(我假设MinGW安装在C:\ MinGw中)

  • 运行之前的下一步是构建/去安装是设置环境变量。

  • 打开命令提示符并转到C:\ Go \ src并从命令行运行all.bat。
  • 然后你必须分别将GOOS,GOARCH和CGO_ENABLED设置为windows,386和0!(你还应该将GOPATH设置为当前Go项目所在的路径)。
  • 接下来运行make.bat和make.bat --no-clean 之后,您可以为32位系统构建项目!我希望这很有帮助!

答案 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位程序。