检测Linux下的64位环境中是否运行32位进程

时间:2014-11-15 20:20:12

标签: c++ c linux 64-bit 32bit-64bit

我正在分发一个32位版本的软件。我想在运行时检测它运行的用户区是否为64位,并且能够运行64位可执行二进制文件(ELF 64位x86-64)。

这与在编译时检测架构是32位还是64位不同。

我希望以最便携的方式做到这一点,所以我宁愿避免像file $(which init) | grep x86-64那样依赖于

我认为阅读cpuid也不是解决方案 - 可以在64位CPU上运行32位操作系统。

检测以长模式运行的64位cpu似乎也不是解决方案,也不检测内核本身是否为64位,因为操作系统可能是具有64位内核的32位用户空间(因为可以使用some Debian configurations)。

我主要不感兴趣的是检测32&以外的位数。 64。

我能想到的一个可能的强大解决方案是实际包含并尝试调用64位ELF二进制文件并查看它是否运行,但这并不是一种非常有效的方法。是否有一个linux函数或stl或boost中的某些东西可以帮助我可靠地找到它?

具有讽刺意味的是,一次等效问题是very easy to solve under Windows

1 个答案:

答案 0 :(得分:3)

您可以测试是否存在/lib64/ld-linux-x86-64.so.2。从理论上讲,这并不总是有效,因为Linux系统可以将动态链接器放在其他地方,但这个特定的路径是目前最常见的,加上动态链接器的路径硬编码到ELF二进制文件中,所以这适用于至少以及实际将64位库与您的软件捆绑在一起(假设有匹配的libc,无论如何)。