のねのBlog

パソコンの問題や、ソフトウェアの開発で起きた問題など書いていきます。よろしくお願いします^^。

'CLOCK_REALTIME' undeclared (first use in this function)

raspberry pi でコンパイルオプションに-std=c99を追加した。

'CLOCK_REALTIME' undeclared (first use in this function)
location: d:\SysGCC\firmware-master\opt\vc\include\interface\vcos\pthreads\vcos_platform.h	

VCOS_INLINE_IMPL
VCOS_STATUS_T vcos_semaphore_wait_timeout(VCOS_SEMAPHORE_T *sem, VCOS_UNSIGNED timeout) {
   struct timespec ts;
   int ret;
   if (clock_gettime(CLOCK_REALTIME, &ts) == -1)  <==これが宣言されないようだ。
      return VCOS_EINVAL;
   ts.tv_sec  += timeout/1000;
   ts.tv_nsec += (timeout%1000)*1000*1000;
   if (ts.tv_nsec > 1000000000) {
      ts.tv_sec++;
      ts.tv_nsec -= 1000000000;
   }

   while (1) {
      ret = sem_timedwait( sem, &ts );
      if (ret == 0) {
         return VCOS_SUCCESS;
      } else {
         if (errno == EINTR) {
            continue;
         } else if (errno == ETIMEDOUT) {
            return VCOS_EAGAIN;
         } else {
            vcos_assert(0);
            return VCOS_EINVAL;
         }
      }
   }
}

以下のdefineでは、治らなかった。

#define _POSIX_C_SOURCE >= 199309L

この問題を解消するには、-std=c99ではなく、-std=gnu99とします。