La versión del kernel que se muestra en el archivo en un archivo ejecutable no tiene nada que ver con el kernel instalado en su sistema. Coincide con la biblioteca C con la que se vinculó el programa en tiempo de compilación.
Su compilador C se dirige a una biblioteca C específica (generalmente glibc). A su vez, la biblioteca C se dirige a una API kernel (es decir, la biblioteca C está construida para un kernel específico). Esa es la versión que se muestra en el archivo .
No tiene que preocuparse por el mimetismo entre la versión del kernel mostrada por el archivo y la versión del kernel instalada en su máquina.
@REALFREE: puede intentar el siguiente experimento. Tal vez será ayuda a tener una idea de lo que está pasando:
$ uname -r
3.10-2-amd64
$ gcc -Wall -Werror hello.c -o hello
$ readelf --notes ./hello
Displaying notes found at file offset 0x0000021c with length 0x00000020:
Owner Data size Description
GNU 0x00000010 NT_GNU_ABI_TAG (ABI version tag)
OS: Linux, ABI: 2.6.32
La información sobre la etiqueta ABI está contenida en un segmento llamado Elf NOTA. Esta información está escrita por el vinculador cuando se compila el programa. Coincide con la etiqueta ABI de la biblioteca C.
$ 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
Displaying notes found at file offset 0x00000294 with length 0x00000020:
Propriétaire Taille des données Description
GNU 0x00000010 NT_GNU_ABI_TAG (étiquette de version ABI)
OS: Linux, ABI: 2.6.32
el fin de construir la biblioteca C, tiene que seleccionar una versión del núcleo . Aquí, la biblioteca C se compiló para un núcleo 2.6.32 pero también funciona con kernels más recientes. Sin embargo, si el programa se ejecuta en un núcleo anterior a 2.6.32, se muestra un núcleo demasiado antiguo advertencia .
¿Qué versión de los encabezados de Linux se encuentra en '/ usr/src/linux'? – robert
La salida del compilador no depende de la versión del kernel que está utilizando. Solo depende del compilador que estás usando. –
Parece que tengo diferentes versiones de Linux aquí: mahdi @ XO0PS: ~ $ ls/usr/src/| grep linux linux-headers-2.6.38-14 linux-headers-2.6.38-14-generic-pae linux-headers-2.6.38-8 linux-headers-3.2.0-23 linux-headers -3.2.0-23-generic linux-headers-3.2.0-24 linux-headers-3.2.0-24-generic linux-headers-3.2.0-26 linux-headers-3.2.0-26-generic linux-headers-3.2.0-27 linux-headers-3.2.0-27-genéricos linux-headers-3.2.0-29 linux-headers-3.2.0-29-generic – mahdi