我有一个golang库,可以在Linux、MacOs和Windows上很好地构建和运行.当我试图在amd64 Windows虚拟机上为386构建它时,问题来了.我已经安装了最新的golang SDK和mingw,这使amd64构建工作正常,但没有安装386:

PS > gcc -v
gcc.exe (MinGW-W64 x86_64-posix-seh, built by Brecht Sanders) 11.2.0

PS > go version
go version go1.18.3 windows/amd64
    
PS > $Env:GOOS = "windows"; $Env:GOARCH = "386"; $Env:CGO_ENABLED ="1"; go build -v -buildmode=c-shared -ldflags="-s -w" -gcflags="-l" -o xyz_amd64.dll xyz_win_dll.go
...
runtime/cgo
c:/programdata/chocolatey/lib/mingw/tools/install/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/pro
gramdata/chocolatey/lib/mingw/tools/install/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/lib/libmingwthrd.a when searching for -lmingwt
hrd
...
<a lot of skipping incompatible messages here>
collect2.exe: error: ld returned 1 exit status

如何修复?AFAIK应该可以在同一个盒子上为两个 arch 建造.

推荐答案

我在项目描述中找到了差异,并切换到https://www.mingw-w64.org/.它包含arch 386和x64的LIB.现在对我来说,跨编译工作很好.

Go相关问答推荐

你能把用户界面文件中的GTK4应用程序窗口添加到GTK4应用程序中吗?

Golang String

包裹网.Conn导致挂起读取

未实现的 desc = 未知服务 pb.AuthService 我的简单身份验证服务器上出现错误

用 fork 替换 Go 依赖:...用于两个不同的模块路径

如何使用gosdk在Dynamodb中进行UpdateItem时,将ValueBuilder对象声明为StringSet类型?

使用goqu无法获取响应

为什么我只收到部分错误而不是我启动的 goroutines 的所有错误?

下载和合并时输出文件已损坏

如何以干净的方式在中间件中注入 repo 或服务?

在本地 go 应用程序上获取秘密的正确策略

如何在 Golang http.Request 对象中读取自定义 ajaxParams

每次有人进入我的网站时如何运行特定功能?

在 docker kill --signal=SIGX 上以这种方式关闭容器内运行的 go 应用程序是否安全?

同时调用应该只获取一次数据

GOENV 只能使用 OS 环境设置

try 执行`go test ./... -v`时,Golang中有没有办法设置标志

Go:为一组单个结果实现 ManyDecode

comparable和any有什么区别?

获取单调时间,同 CLOCK_MONOTONIC