(я знаю, что вы спрашиваете о glibc
, но вы действительно хотите знать, присутствует ли clock_gettime
, верно? Но ничего в вашем вопросе не относится к Linux ...)
ЕслиВы хотите проверить на clock_gettime
, вы можете использовать препроцессор.Если присутствует clock_gettime
, то будет определено _POSIX_TIMERS
.Функция clock_gettime
является частью необязательного расширения POSIX ( см. Спецификацию ), поэтому она не специфична для Linux, но и не универсальна.В Mac OS X отсутствует clock_gettime
: он не объявлен ни в каком заголовке и не определен ни в одной библиотеке.
#include <time.h>
#include <unistd.h> /* for _POSIX_TIMERS definition, if present */
#if _POSIX_TIMERS
...use clock_gettime()...
#else
...use something else...
#endif
Это не решает проблему, с которой вам все равно придется связываться с -lrt
вLinux.Обычно это решается с помощью что-то вроде AC_CHECK_LIB
в Autoconf, я уверен, что в CMake есть эквивалент.
From man 2 clock_gettime
:
В системах POSIX, в которых эти функции работаютдоступны символы, символ _POSIX_TIMERS
определен в <unistd.h>
до значения больше 0. Символы _POSIX_MONOTONIC_CLOCK
, _POSIX_CPUTIME
, _POSIX_THREAD_CPUTIME
указывают, что доступны CLOCK_MONOTONIC
, CLOCK_PROCESS_CPUTIME_ID
, CLOCK_THREAD_CPUTIME_ID
.(См. Также sysconf (3).)
В Дарвине вы можете использовать функцию mach_absolute_time
, если вам нужны монотонные часы с высоким разрешением.Если вам не нужно разрешение или монотонность, возможно, вам следует использовать gettimeofday
на обеих платформах.