linux命令“file”显示“for GNU / Linux 2.6.24”

我总是使用file命令来检查文件types,主要是在我编译一个新的项目,以确保一切正常。

输出结果如下所示:

 proj_out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.24, BuildID[sha1]=0x23d9f966854e09d721c6110d505247483dae02fe, stripped 

我的问题是,因为我的Linux内核已经更新到3.0+,为什么它仍然显示它是为旧版本的Linux编译?

 for GNU/Linux 2.6.24 

这是什么与file命令有关,还是我必须做任何事情来编译我的项目对较新的Linux内核?

谢谢

Solutions Collecting From Web of "linux命令“file”显示“for GNU / Linux 2.6.24”"

由可执行文件上的文件显示的内核版本与系统上安装的内核无关。 它与构建时与程序链接的C库相匹配。

你的C编译器的目标是一个特定的C库(通常是glibc)。 反过来,C库的目标是内核API(即C库是为特定的内核构建的)。 这是文件显示的版本。

您不必担心文件显示的内核版本与机器上安装的内核版本之间的不匹配。

@REALFREE:你可以尝试下面的实验。 也许它会帮助你掌握发生了什么:

 $ uname -r
 3.10-2-AMD64
 $ gcc -Wall -Werror hello.c -o hello
 $ readelf  - 注释./hello
显示在文件偏移量0x0000021c处发现的长度为0x00000020的注释:
  所有者数据大小说明
   GNU 0x00000010 NT_GNU_ABI_TAG(ABI版本标签)
    操作系统:Linux,ABI:2.6.32

有关ABI标签的信息包含在一个称为NOTE的精灵段中。 程序编译时,这个信息是由链接器编写的。 它匹配C库的ABI标签。

 $ ldd ./hello
         linux-vdso.so.1(0x00007fffd31fe000)
         libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6(0x00007f5f1a465000)
         /lib64/ld-linux-x86-64.so.2(0x00007f5f1a827000)
 $ readelf --notes /lib/x86_64-linux-gnu/libc.so.6
显示长度为0x00000020的文件偏移量为0x00000294的笔记:
   PropriétaireTaille desdonnées描述
   GNU 0x00000010 NT_GNU_ABI_TAG(版本ABI)
    操作系统:Linux,ABI:2.6.32

为了构建C库,你必须选择一个内核版本。 在这里,C库是为2.6.32内核编译的,但它也适用于更新的内核。 但是,如果程序在2.6.32以上的内核上运行,则会显示内核过时的警告。

该版本号是指运行编译器的主机上构建glibc C库的内核头文件。 从广义上讲,它显示了可执行文件预计将支持的内核级别。