在 Linux 下,当我编译以下程序时:
int main() {}
使用 gcc 4.7:
$ gcc test.c
并使用以下命令检查生成的可执行文件readelf
:
$ readelf -h a.out
...
OS/ABI: UNIX - System V
...
它将EI_OSABI
ELF 标头中的字节设置为ELFOSABI_SYSV
,而不是ELFOSABI_LINUX
。
有谁知道这背后的历史或原因?天真地,人们可能期望它被设置为 Linux。
此外,将其设置为 Linux 会有什么后果?