问题的简短版本:
哪个 C 头文件包含与系统机器架构相对应的宏(例如__x86_64__
,,,__ia64__
?__mips__
)
问题的较长版本:
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__'