在 Windows Server 2008 上构建时“不是有效的 Win32 应用程序”

我有以下问题。我有一个为每个操作系统和 ARCH 构建的简单 Golang 应用程序。我的意思是操作系统:

  • 视窗(GOOS=视窗)

  • OSX(它建立在 OSX 机器上)

和拱门:

  • 32 (GOARCH=amd64)

  • 64 (GOARCH=386)

一切都适用于 MAC OS X、Windows Server 2008+。但是当我尝试在 Windows Server 2008 SP2 上运行已编译的应用程序时遇到了问题。我收到以下错误:

App.exe is not a valid Win32 application

并在尝试从 PowerShell 运行时:

The specified executable is not a valid application for this OS platform

我的申请几乎是 1:1

如果链接将来无法使用,请使用以下代码:

我正在使用 GO 1.14 并通过以下方式构建它:

  • go build -ldflags "-s -w" app.go

  • 我也尝试过go build app.go,但没有任何改变:(


HUH函数
浏览 529回答 1
1回答

富国沪深

我相信这是因为从Go 1.13开始,内部链接的 Windows 二进制文件指定的 Windows 版本现在是 Windows 7:由内部链接的 Windows 二进制文件指定的 Windows 版本现在是 Windows 7 而不是 NT 4.0。这已经是 Go 所需的最低版本,但会影响具有向后兼容模式的系统调用的行为。这些现在将按照记录的方式运行。外部链接的二进制文件(任何使用 cgo 的程序)总是指定更新的 Windows 版本。Windows 7 有发布版本NT 6.1,Windows Server 2008 有发布版本NT 6.0(来源)。所以很简单,Windows Server 2008 不满足构建二进制文件所需的最低 Windows 版本。如果您需要支持 Windows Server 2008,请尝试使用 Go 1.12 构建它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go