Según los requisitos del cliente, instalé CentOS 5.6 con el kernel predeterminado. Con este núcleo instalado, el archivo time.h incluye el archivo #define CLOCK_MONOTONIC
.
Ahora, se instaló un kernel en tiempo real junto con el kernel-devel y nuestro código quisiera usarlo CLOCK_MONOTONIC_RAW
. Existe como parte de los archivos de encabezado del núcleo, pero cuando compilo nuestro código, no lo encuentra en el espacio de usuario estándar incluido.
Mi pregunta es, ¿cuál es el procedimiento adecuado para incluir / reemplazar lo time.h
encontrado por defecto con el kernel en tiempo real? Según mi investigación, parece que los enlaces simbólicos son malos, entonces, ¿cómo se debe manejar? ¿Cuál es el procedimiento o proceso? Actualizar a CentOS 6.0 o 5.7 no es una opción según los requisitos del cliente.
fuente
Respuestas:
Hay que hacer una distinción clave sobre el origen de los archivos de encabezado:
<time.h>
es proporcionado por glibc (por ejemplo, elglibc-headers
paquete)<linux/time.h>
es proporcionado por los encabezados del kernel de Linux.Cambiar el núcleo y sus paquetes de encabezado no afectará
<time.h>
. Solo cambiar glibc hará eso.Debería encontrar que glibc's
<time.h>
incluye<bits/time.h>
que se resuelve como, por ejemplo,/usr/include/x86_64-linux-gnu/bits/time.h
y defineCLOCK_MONOTONIC_RAW
. Si no lo hace, y no puede actualizarlo, tendrá que recurrir a incluir código como este:fuente
Solo necesitas
#include <linux/time.h>
fuente
make install_headers
. Si obtuvo un paquete de kernel actualizado, entonces necesita obtener el paquete kernel_headers actualizado correspondiente.Los encabezados que instala su distribución no son los del núcleo, son versiones desinfectadas / "espaciadas por el usuario". Tendría que obtener una copia de los encabezados en include / linux en las fuentes del núcleo y configurarlos para que se usen con preferencia a los de / usr / include / linux (es necesario deshabilitar el indicador -I para gcc). Y verifique si nada falla.
fuente
Me aseguraría de construir contra los encabezados que vienen con el nuevo núcleo.
CLOCK_MONOTONIC_RAW
deben definirse enlinux/time.h
. Primero averigüe qué encabezados está utilizando y compruebe cómo se define en el archivo. Puede definirlo en su código (solo como un cheque) para ver qué sucede.fuente