32

I've coded a Go program in a 64 bit system but I want to compile a 32 bit binary!

The 64 bit binary is working just great but I have no idea how to create a 32 bit binary.

How can I do it?

4

4 回答 4

27

如果你从源代码构建你的 Go,那么你可以为任何 CPU 和操作系统构建任何额外的编译器和库。如果您在 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 程序。只需确保set GOARCH=386在调用 windows/386 的任何命令之前执行此操作。

一个警告:这不支持cgo,因此您不能使用任何使用cgo.

于 2013-05-14T23:55:19.047 回答
8

我在我的 Windows 7 64 位 PC 上实现这一点(没有任何编译器编译)的方式是首先安装 windows amd64,然后下载 32 位zip 并解压缩到第二个文件夹:

\go\go32
\go\go64

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

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

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

于 2014-04-11T01:23:34.527 回答
3

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

  • 我做的第一件事是从http://www.mingw.org/下载 GCC 。

  • 接下来我将C:\MinGW\bin添加到PATH环境变量中(我假设 MinGW 安装在 C:\MinGw 中)

  • 运行go build/go install之前的下一件事是设置环境变量。

  • 打开命令提示符并 cd 到 C:\Go\src 并从命令行运行 all.bat。

  • GOOSGOARCHCGO_ENABLED分别设置为windows3860!(您还应该将 GOPATH 设置为当前 Go 项目所在的路径)。

  • 接下来运行 make.bat 和 make.bat --no-clean 之后就可以为 32 位系统构建项目了!我希望这是有帮助的!

于 2013-05-15T15:38:16.813 回答
2

我的 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 位程序。

于 2020-04-28T13:42:44.703 回答