В соответствии с требованиями заказчика я установил CentOS 5.6 с ядром по умолчанию. При установленном ядре файл time.h включает в себя #define CLOCK_MONOTONIC
.
Теперь ядро реального времени было установлено вместе с kernel-devel, и наш код хотел бы его использовать CLOCK_MONOTONIC_RAW
. Он существует как часть заголовочных файлов ядра, но когда я компилирую наш код, он не находит его в стандартном пользовательском пространстве.
У меня вопрос, какова правильная процедура для включения / замены time.h
найденного по умолчанию ядра реального времени? Из моего исследования кажется, что символические ссылки плохие, так как с этим следует обращаться? Какова процедура или процесс? Обновление до CentOS 6.0 или 5.7 не является вариантом в соответствии с требованиями клиента.
источник
Ответы:
Необходимо сделать ключевое различие в том, откуда берутся заголовочные файлы:
<time.h>
предоставляется glibc (например,glibc-headers
пакет)<linux/time.h>
обеспечивается заголовками ядра Linux.Изменение ядра и его пакетов заголовков не повлияет
<time.h>
. Только изменение glibc сделает это.Вы должны найти, что
<time.h>
включает в glibc,<bits/time.h>
который решает, например, как/usr/include/x86_64-linux-gnu/bits/time.h
и определяетCLOCK_MONOTONIC_RAW
. Если этого не произойдет, и вы не сможете обновить его, вам придется прибегнуть к включению такого кода:источник
Вам просто нужно
#include <linux/time.h>
источник
make install_headers
. Если вы получили обновленный пакет ядра, то вам нужно получить соответствующий обновленный пакет kernel_headers.Заголовки, которые устанавливает ваш дистрибутив, - это не те, которые находятся в ядре, а очищенные / «пользовательские» версии. Вам нужно получить копию заголовков в include / linux в исходных кодах ядра и настроить их так, чтобы они использовались в предпочтении перед заголовками в / usr / include / linux (необходимо пометить флаг -I для gcc). И проверь, если ничего не пропускает.
источник
Я хотел бы убедиться, что я строю против заголовков, которые пришли с новым ядром.
CLOCK_MONOTONIC_RAW
должны быть определены вlinux/time.h
. Сначала выясните, какие заголовки вы используете, и проверьте, как он определен в файле. Вы можете определить это в своем коде (только в качестве проверки), чтобы увидеть, что происходит.источник