C 未知类型名称';时钟ID';

C 未知类型名称';时钟ID';,c,macos,timer,posix,C,Macos,Timer,Posix,我试图在Mac OS X上使用Linux平台上编写的C代码。我遇到了一个与计时器相关的错误: ../src/stinger/timer.c:61:1: error: unknown type name 'clockid_t' ../src/stinger/timer.c:74:2: error: #error "Cannot find a clock!" 它指向这段代码 static clockid_t clockid; #if defined(CLOCK_REALTIME_ID) #de

我试图在Mac OS X上使用Linux平台上编写的C代码。我遇到了一个与计时器相关的错误:

../src/stinger/timer.c:61:1: error: unknown type name 'clockid_t'
../src/stinger/timer.c:74:2: error: #error "Cannot find a clock!"
它指向这段代码

 static clockid_t clockid;

#if defined(CLOCK_REALTIME_ID)
#define CLKID CLOCK_REALTIME_ID
#define CLKIDNAME "CLOCK_REALTIME_ID"
#elif defined(CLOCK_THREAD_CPUTIME_ID)
#define CLKID CLOCK_THREAD_CPUTIME_ID
#define CLKIDNAME "CLOCK_THREAD_CPUTIME_ID"
#elif defined(CLOCK_REALTIME_ID)
#warning "Falling back to realtime clock."
#define CLKID CLOCK_REALTIME_ID
#define CLKIDNAME "CLOCK_REALTIME_ID"
#else
#error "Cannot find a clock!"
#endif

这个错误的原因是什么?类型
clockid\t
应该从哪里来?

如果我没记错的话,所有的“时钟”东西都是POSIX的“实时”扩展的一部分,OSX没有实现。所以你不会有那么好的运气。您必须使用OSX特有的功能才能使时钟具有良好的分辨率


编辑:在中,我有一个OSX的包装器代码,用于类似的C11函数
timespec\u get
。不知道这是否真的有用,我没有Mac电脑,但你可以看看。(文件是“p99_threads.h”)

来自
time.h
,但特性测试宏要求是
\u POSIX\u C_SOURCE>=199309L
。如果您使用例如
-std=c99
进行编译,则未设置。我使用
-std=c99
进行编译。如何解决此问题?例如,在命令行上使用
-D_POSIX_C_SOURCE=199309L
,或者您可以在
之前的文件中定义它。我不确定,也许用
-gnu99
编译也会设置它。下面是代码开发人员对这个问题的评论:>librt将计时器作为一个非历史部件存放。苹果对标准“有不同的想法”,并做了其他事情。在修复上述错误(或使用make-k…哦,等等,这是Mac)后,您将看到这些错误。有关单定时器版本,请参见图500代码。毫无疑问,有人在某个地方用POSIX兼容的包装器包装了苹果的计时器。