哪个标头定义了指定机器架构的宏?

哪个标头定义了指定机器架构的宏?

问题的简短版本:

哪个 C 头文件包含与系统机器架构相对应的宏(例如__x86_64__,,,__ia64____mips__

问题的较长版本:

我想运行神经节监控工具蒂莱拉基于运行 Linux 的系统。

Ganglia 目前不支持 Tilera。为了让它工作,我需要修改一个名为机器类型功能返回机器架构。该函数的主体在编译时确定,如下所示:

g_val_t
machine_type_func ( void )
{
   g_val_t val;

#ifdef __i386__
   snprintf(val.str, MAX_G_STRING_SIZE, "x86");
#endif
#ifdef __x86_64__
   snprintf(val.str, MAX_G_STRING_SIZE, "x86_64");
#endif
...
   return val;
}

我需要为 Tilera 添加适当的行,但我不知道指定基于 Tilera 的系统的宏的名称。我猜测这个宏是在标准 Linux 头文件之一中定义的,但我不知道该查看哪一个。

答案1

没有头文件定义它 - 这些宏是由编译器预定义的。要查找预定义宏的完整列表,请执行以下操作:

echo | gcc -E -dM -

然后查看结果以查找可能的宏。

答案2

更准确地说,我认为这是__x86_64__定义的地方,例如:https://github.com/gcc-mirror/gcc/blob/releases%2Fgcc-10.2.0/gcc/config/i386/i386-cc#L688

 cpp_define (parse_in, "__x86_64__");

但我还没有耐心去修改源码,重新编译并测试它。一个好的搜索方法是:

git grep '"__aarch64__'

相关内容