如何解决go "-buildmode=c-shared" 编译的 DLL 在 Windows XP 64 位目标上不起作用
我正在使用 golang 来实现 go 包,并从相同的代码生成 c-shared dll,以支持我的 Go 和 C 应用程序。我必须支持 Windows XP,因为有客户在使用它。
使用go1.10.8,因为它是最后一个支持Windows XP的官方go版本。
我创建了一个 add.go 文件,其中包含以下代码:
package main
import (
"C"
)
//export Add
func Add() bool {
return true
}
func main() {}
我使用以下命令为 windows/amd64 编译: go build -o add.dll -buildmode=c-shared ./add.go
编译生成 add.dll,它在 windows 7 和更高版本的 windows 上运行良好。但是在 Windows XP 上,我收到错误消息:“运行时:无法创建新的操作系统线程 (22)”
在依赖项walker中,对于add.dll,我看到kernel32.dll中缺少3个函数,
- RtlAddFunctionTable
- RtlLookupFunctionEntry
- RtlVirtualUnwind
出人意料的是,当 add.go 为 32 位架构编译时(CC=i686-w64-mingw32-gcc-posix CXX=i686-w64-mingw32-g++-posix GOOS=windows GOARCH=386),它在 Windows 上工作XP 32 位机器。也不需要kernel32.dll中的上述函数。
我是 golang、mingw-w64 和 stackoverflow 的新手 :)。我尽可能地挖了这个,发现 go build 命令使用 mingw-w64 编译器来生成 add.dll。并且 mingw-w64 已停止支持 Windows XP 和 2K3。
我仍然尝试使用旧版本的 mingw-64/tdm-gcc 进行编译,但在 Windows XP 上观察到相同的错误。也经历过:link,认为这可能是解决方案,但是当我使用--enable-threads=win95编译mingw-w64-gcc包时,它给出了错误“win95是一个未知线程包”。>
有人试过吗?或任何有关如何使此功能适用于 Windows XP 64 位目标机器的建议。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。