Поведение libc
Привет всем!
Столкнулся с проблемой и не знаю от чего она и как её побороть.
Вот тупая программа:
#include <time.h>
#include <signal.h>
#include <stdio.h>
void my_alarm(sigval_t t)
{
return;
}
int main(int argc, char** argv)
{
int rc;
struct sigevent sigevent;
timer_t tmrid;
sigevent.sigev_notify = SIGEV_THREAD;
sigevent.sigev_value.sival_ptr = 0;
sigevent.sigev_notify_function = my_alarm;
sigevent.sigev_notify_attributes = 0;
rc = timer_create(CLOCK_MONOTONIC, &sigevent, &tmrid);
if (rc == -1) {
perror("Error");
return 1;
}
return 0;
}
Если её скомпилировать и слиноковать динамически с libc и librt, то все работает.
Если же это делать статически, то timer_create возвращает EINVAL, при этом, если
заменить CLOCK_MONOTONIC на CLOCK_REALTIME, то все опять работает. То есть статическая
версия libc почему-то не хочет создавать таймер, привязанный к CLOCK_MONOTONIC,
однако clock_getres работает для обоих типов линковки и с CLOCK_MONOTONIC, и с CLOCK_REALTIME.
Проверено и в sarge, и в ethc. Кто-нибудь скажет, чем обусловлено такое поведение?
--
Макс
Reply to: