我在64位机器上将Golang构建为32位版本.然而,它有一个问题,当我这样构建时,它会占用SysWOW64文件夹中的"kernel32.dll",但当我在32位计算机(Windows 7)上运行时.它没有SysWOW64文件夹,因此它返回一个错误:

fatal error: kernel32.dll not found

以下是我的Go Build命令:

go build -ldflags "-s -w"

以下是我的Go Env:

set GO111MODULE=
set GOARCH=386
set GOBIN=
set GOCACHE=C:\Users\name\AppData\Local\go-build
set GOENV=C:\Users\name\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=C:\Users\name\go\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=C:\Users\name\go
set GOPRIVATE=
set GOPROXY=https://proxy.golang.org,direct
set GOROOT=C:\Program Files\Go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLCHAIN=auto
set GOTOOLDIR=C:\Program Files\Go\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.21.1
set GCCGO=gccgo
set GO386=sse2
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=D:\Center\go.mod
set GOWORK=
set CGO_CFLAGS=-O2 -g
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-O2 -g
set CGO_FFLAGS=-O2 -g
set CGO_LDFLAGS=-O2 -MT
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m32 -mthreads -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=C:\Users\name\AppData\Local\Temp\go-build581533674=/tmp/go-build -gno-record-gcc-switches

有谁能给我提个解决方案吗?

推荐答案

根据phuclv的回答:"SysWOW64是64位Windows上的32位系统32.32位应用程序对%windir%\System32的所有访问都将重定向到%windir%\SysWOW64."

因此,我认为在您的情况下,您需要构建一个32-bit machine(或虚拟机),然后copybuild您的代码在那里.当然,你必须使用downgrade个库来匹配操作系统,有时这可能很有挑战性.

Go相关问答推荐

Term~T中的类型不能是类型参数,但可以是引用类型参数的切片

一种基于时间的Golang函数节制器

如何在出现错误时停止从通道读取?

Prometheus 摘要分位数错误

如何绕过深层 xml,没有嵌套循环?

如何从 Go Lambda 函数返回 HTML?

hyperledger fabric - go:在 $PATH 中找不到可执行文件

为什么 net/http 不遵守超过 30 秒的超时持续时间?

gopacket:IP-in-IP 数据包上的解码层

errors.Wrap 和 errors.WithMessage 有什么区别

使用 os/exec 和在命令行执行之间的结果莫名其妙地不同

Golang:如何判断通过缓冲通道进行通信时生产者或消费者是否较慢?

如何过滤来自 fsnotify 的重复系统消息

Go:从 ssl 证书中获取 'subject/unstructeredName' 的值

如何在 helm 中将字符串连接到 .AsConfig 的结果?

如何使用 Status 字段创建 Kubernetes 对象?

如何在Golang中的差异函数中杀死命令Exec

如何在 docker 文件中安装 golang 包?

go mod tidy 错误消息:但是 go 1.16 会 Select

如何使用 fyne 避免 GUI 应用程序中的循环依赖?