gpt4 book ai didi

c - 如何使用预处理器识别 Linux 上的 64 位构建?

转载 作者:IT王子 更新时间:2023-10-29 00:54:34 27 4
gpt4 key购买 nike

我正准备将 Windows 32 位应用程序移植到 64 位,但稍后可能会决定将整个应用程序移植到 Linux。

代码包含的部分取决于应用程序可用的内存量(这取决于我创建的是 32 位版本还是 64 位版本),而编译代码的 32 位版本的能力应该是为向后兼容而保留。

在 Windows 上,我可以简单地将相应的代码部分包装到预处理器语句中,以确保编译正确版本的代码。

不幸的是我在Linux平台上编程的经验很少,所以出现了这个问题:

如何识别 Linux 平台上的 64 位版本?

是否有任何(最好是非特定于编译器的)预处理器定义我可以检查这个?

提前致谢!

\比约恩

最佳答案

假设您正在为 IA32(32 位)和 amd64(AMD64/x86-64/EM64T/Intel 64 的非安腾 64 位目标)使用最新的 GNU GCC 编译器,因为很少有人需要不同的Linux 编译器(Intel 和 PGI)。

编译器行开关(您可以将其添加到 Makefile 中的 CFLAGS)-m64/-m32 来控制构建目标。

对于条件 C 代码:

#if defined(__LP64__) || defined(_LP64)
#define BUILD_64 1
#endif

#include <limits.h>
#if ( __WORDSIZE == 64 )
#define BUILD_64 1
#endif

虽然第一个是特定于 GCC 的,但第二个更便携,但在一些我想不到的奇怪环境中可能不正确。

目前两者都应该适用于 IA-32/x86 (x86-32) 和 x86-64/amd64 环境。我认为它们可能也适用于 IA-64 (Itanium)。

另请参阅 Andreas Jaeger 在 GCC 开发者峰会上发表的题为 Porting to 64-bit GNU/Linux Systems 的论文其中更详细地描述了 64 位 Linux 环境。

关于c - 如何使用预处理器识别 Linux 上的 64 位构建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/685124/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com