【发布时间】:2021-05-21 01:39:19
【问题描述】:
我开发了引导软件来开始我的游戏。我用 Go 做到了这一点。跨平台对我来说尤其重要。另外,我不想将下载链接分成两个 x86 / x64。我想在一个输出中处理所有内容。这就是为什么我必须编译到 x86。执行此操作时,我无法正确检测到操作系统是 x86 还是 x64。
在编译为 x86 的软件中,我如何正确检测操作系统 x86 或 x64(在 Go 中)。
此代码在编译为 x86 时不正确。
const is64Bit = uint64(^uintptr(0)) == ^uint64(0)
【问题讨论】:
-
您可能需要实际询问操作系统,在这种情况下,它当然取决于您使用的操作系统。
-
我不想要特定操作系统的信息。编译后的程序将是跨平台的,应该可以在所有操作系统上运行。
-
不同的操作系统使用不同的可执行格式;你不可能拥有一个可以在 GNU/Linux 系统、Mac 或 Windows 上运行的二进制文件。您当然可以使用相同的可移植检测代码在为当前操作系统构建的其他两个可执行文件之间进行选择(例如,一些处理操作系统差异的库),但您应该做好准备,以防万一事实证明这是不可能的。
-
AFAIK,在 x86 asm there's no way to tell 中(仅通过运行用户空间 asm 指令,没有系统调用)无论您处于 32 位保护模式(在“传统模式”32 位操作系统下) ) 或 32 位兼容模式(64 位操作系统下长模式的子模式:en.wikipedia.org/wiki/X86-64#Operating_modes)。
-
@PeterCordes 那么我应该通过在网站上放置两个单独的下载链接作为 x64 x32 位来解决这个问题吗?例如,discord 是如何解决这个问题的? Discord 只有一个下载链接。 discord.com/download
标签: go x86 cross-platform cpu-architecture 32bit-64bit