为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Windows 上使用 cgo 为 386 arch 构建 lib?

如何在 Windows 上使用 cgo 为 386 arch 构建 lib?

Go
蛊毒传说 2023-01-03 13:48:16
我有一个 golang 库,可以在 Linux、MacOs 和 Windows 上构建并运行良好。当我试图在 amd64 Windows VM 上为 386 构建它时,问题就来了。我已经安装了最新的 golang SDK 和 mingw,这使得 amd64 构建工作正常,但不是 386:PS > gcc -vgcc.exe (MinGW-W64 x86_64-posix-seh, built by Brecht Sanders) 11.2.0PS > go versiongo 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/cgoc:/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:/programdata/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 -lmingwthrd...<a lot of skipping incompatible messages here>collect2.exe: error: ld returned 1 exit status如何解决?据我所知,应该可以在同一个盒子上为两个拱门建造。
查看完整描述

2 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

Cgo build fail,我是这样解决的:首先确保build C代码成功。

一般cgo交叉编译需要C交叉编译和Go交叉编译。也许你可以添加 set // #cgo CFLAGS:C_CrossBuild_Parameters

如您所见,这并不容易。这就是交叉编译消失的原因


查看完整回答
反对 回复 2023-01-03
?
手掌心

TA贡献1942条经验 获得超3个赞

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



查看完整回答
反对 回复 2023-01-03
  • 2 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信