【问题标题】:How do I identify x86 vs. x86_64 at compile time in gcc?如何在 gcc 的编译时识别 x86 与 x86_64?
【发布时间】:2015-07-20 07:45:21
【问题描述】:

我只想在 x86 和 x86_64 linux 上编译我的部分代码,而不是 s390 linux 或其他。如何使用C中的宏define来实现呢?我知道linux是决定linux操作系统的,386486586是决定CPU架构的。是否有一个简单的宏定义来确定 x86 linux 和 x86_64 linux?谢谢

【问题讨论】:

标签: c linux macros


【解决方案1】:

您可以轻松检测您是否处于 64 位模式:

#if defined(__x86_64__)
/* 64 bit detected */
#endif
#if defined(__i386__)
/* 32 bit x86 detected */
#endif

【讨论】:

  • 嗨,David,我需要检测 linux 86 和 linux 8664。您的解决方案可以检测 8664 和 i386。但是 i486 和 i584 等 x8​​6 平台呢?我需要写成#if defined(i386) || #if 定义(i486) || #if 定义(i586) ?
  • 嗯,i386 将适用于所有基于 Intel 的 32 位 Linux 安装。如果你想深入挖掘,你可以。例如,amd64 表示 AMD 架构上的 64 位系统。 Itanium 将是 IA64486586686 也符合您的预期。你可能想看看这个:sourceforge.net/p/predef/wiki/Architectures
【解决方案2】:

如果您的编译器没有提供预定义的宏和常量,您可以自己定义:gcc -D WHATEVER_YOU_WANT

额外奖励:如果您为 amd64 编译代码,但未定义 amd64,您可以比较结果(使用 amd64 特定部分的版本与通用版本相比),看看您的 amd64 优化是否值得付出努力。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    相关资源
    最近更新 更多