如何判断程序运行在x86/x64或ARM Linux平台上

4

我想在一个C程序中完成不同的任务。该程序将在基于x86/x64的GNU/Linux系统以及基于ARM的系统上运行,例如在PC或RaspberryPI上。

是否有GCC预定义的宏可以告诉平台?

类似以下内容:

#ifdef _X64_
   /do x64 stuff
#elif _ARM_
//do arm stuff
#endif

或许这种方法不太妥当?我将使用Makefile进行编译,那么我可以使用自己的定义。哪种方法最好/最安全呢?

1
不是“运行”,而是“编译”。是的,这是正确的方法。 - Eugene Sh.
1
可能是 http://stackoverflow.com/questions/15860850/gcc-predefined-macros-for-architecture-x 的重复问题。 - mikedu95
可能是检测CPU架构编译时的重复问题。 - phuclv
1个回答

6
这个问题已经在以下帖子中得到了回答:
GCC 预定义的架构 X 宏编译时检测 CPU 架构

你可以在这里找到它们:
http://sourceforge.net/p/predef/wiki/Architectures/

你的方法只适用于小段代码或函数,但应该可以工作。

编辑:
基本上,因为链接可能失效:
__arm__ 应该在 ARM 上工作。
__x86_64__ 应该在 x64 架构上工作。

是的,你可以这样做:

#ifdef __x86_64__    
    // do x64 stuff   
#elif __arm__    
    // do arm stuff
#endif    

这个回答已经足够了。仅从链接页面中提取内容只会使答案在某一天变得过时。 - Jeff Hammond

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接