英文:
How build lib for 386 arch with cgo on windows?
问题
我有一个在Linux、MacOS和Windows上构建和运行良好的golang库。问题出现在我尝试在amd64 Windows虚拟机上为386构建它时。我已经安装了最新的golang SDK和mingw,这使得amd64构建正常工作,但386构建不起作用:
如何修复它?据我所知,应该可以在同一台机器上为两个架构构建。
英文:
I have a golang library that builds and works well on Linux, MacOs and Windows. The problem comes when I'm trying to build it for 386 on the amd64 Windows VM. I've installed latest golang SDK and mingw, which makes amd64 build work fine, but not the 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
How to fix it? AFAIK it should be possible to build for both arch on the same box.
答案1
得分: 0
Cgo构建失败,我通过以下方式解决:首先,确保成功构建C代码。
通常,cgo交叉编译需要C交叉编译和Go交叉编译。也许你可以添加设置// #cgo CFLAGS:C_CrossBuild_Parameters
。
正如你所见,这并不容易。这就是为什么交叉编译变得困难。
英文:
Cgo build fail, I solve it by this way: firstly, ensure build C code successfully.
generally, cgo cross compilation require C cross compilation and Go cross compilation . maybe you can add set // #cgo CFLAGS:C_CrossBuild_Parameters
.
As you can see, it's not easy. It's why Cross compilation goes out the window
答案2
得分: 0
我已经找到了项目描述中的差异,并切换到https://www.mingw-w64.org/。它包含了386和x64两种架构的库。现在我的交叉编译工作正常。
英文:
I've found the diff in the project description and switched to https://www.mingw-w64.org/. It contains libs for both arch 386 and x64. Now across compilation works fine to me.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论