在Linux下,当我编译以下程序时:

int main() {}

使用gcc 4.7:

$ gcc test.c

并使用 readelf 检查生成的可执行文件:

$ readelf -h a.out
...
OS/ABI: UNIX - System V
...

它将ELF头中的 EI_OSABI 字节设置为 ELFOSABI_SYSV ,而不是 ELFOSABI_LINUX .

有谁知道这背后的历史或推理?天真地,人们可能会期望它被设置为Linux .

此外,将其设置为Linux有什么后果?