C/C++编译提示getrawmonotonic未在此作用域声明如何解决
getrawmonotonic 函数调用问题解决方案
所需头文件
你引入的<time.h>和<sys/time.h>是POSIX标准时间头文件,不包含Linux特有getrawmonotonic函数的声明,需要额外引入内核层面的时间头文件:
#include <linux/time.h>
编译配置要求
getrawmonotonic属于非POSIX标准的Linux私有接口,默认不会被标准头文件暴露,需要开启_GNU_SOURCE宏才能正常识别,有两种配置方式:
- 代码层面:在所有头文件引入之前添加宏定义
#define _GNU_SOURCE #include <linux/time.h> // 其他头文件引入 - 编译命令层面:编译时添加
-D_GNU_SOURCE参数,示例如下gcc your_code.c -o output -D_GNU_SOURCE # C++ 场景使用g++同理 g++ your_code.cpp -o output -D_GNU_SOURCE
兼容替代方案(推荐)
如果不需要严格使用getrawmonotonic接口,更推荐使用POSIX标准的clock_gettime搭配CLOCK_MONOTONIC_RAW时钟id,二者功能完全一致(返回不含NTP调整的单调时钟时间),且不需要引入Linux私有头文件,兼容性更强:
#include <time.h> struct timespec ts; clock_gettime(CLOCK_MONOTONIC_RAW, &ts);
Ubuntu 20 自带的glibc版本已经将clock_gettime整合进主libc库,不需要额外链接lrt库即可使用。
内容的提问来源于stack exchange,提问作者David Callanan
相关产品推荐
相关产品推荐

