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

Sae*_*ani 3 c linux gcc makefile

在一个c程序中,我想做不同的事情。该程序将在基于 x86/x64 的 GNU/Linux 系统以及基于 ARM 的系统上运行,例如在 PC 或 RaspberryPI 上。

GCC 中是否有预定义的宏来告诉平台?

就像是

#ifdef _X64_
   /do x64 stuff
#elif _ARM_
//do arm stuff
#endif
Run Code Online (Sandbox Code Playgroud)

或者也许这是错误的方法?我将Makefile用于编译,我可以摆脱我自己的定义。

最好/最安全的方法是什么?

小智 5

这已经在这些帖子中得到了回答:
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    
Run Code Online (Sandbox Code Playgroud)