goland,cgo加载32位DLL遇到的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了goland,cgo加载32位DLL遇到的问题相关的知识,希望对你有一定的参考价值。

参考技术A 第一次开发Go程序,使用Goland过程中遇到的一些问题,开发的Go后台需要使用到Windows的一个32位DLL动态库,此为原由,整个过程如下。

在按照上述方式配置好环境,并尝试使用CGO加载DLL时,执行GOLAND的DEBUG提示如下。

经过搜索猜测,是目标机器架构选择错误导致的。
但是在环境配置中,已经正确的选择了Arch为386,尝试使用liteIDE或者直接使用命令行编译,都能够正常编译。唯独使用GoLand不行。
看现象应该是设置没有生效,最后尝试在Run/Debug Configurations再次设置Go env解决此问题。步骤如下:

再次点击debug,发现debug失败,提示如下内容。

这是因为,goland在debug时使用的是dlv插件,该插件还不支持32位程序的调试,直接执行run就可以了。

在使用命令行编译go程序时,可以使用go env命令查看当前编译环境设置。

假如需要修改 GOARCH为386,继续输入命令行 set GOARCH=386 即可,如果重新打开cmd终端,则需要重新设置。所以如果使用命令行编译,可以写一个bat文件,每次都自动先把环境设置好。

以上是关于goland,cgo加载32位DLL遇到的问题的主要内容,如果未能解决你的问题,请参考以下文章

64位进程调用32位dll的解决方法

在 64 位 .Net 应用程序中导入 32 位 dll

如何在运行时后期绑定 32 位/64 位库

修复:尝试加载格式不正确的程序[关闭]

将 32 位 dll 转换为 64 位

Win32 32 位进程加载 64 位 kernel32.dll