gpt4 book ai didi

c - 当包含 时,“getnstimeofday”是系统调用中的隐式声明

转载 作者:行者123 更新时间:2023-12-05 05:16:32 25 4
gpt4 key购买 nike

回答者

解决了!!感谢@IanAbbott

标题应该是:

#include <linux/ktime.h>
#include <linux/timekeeping.h>

而不是 <linux/time.h> .

更多细节见讨论。


原始问题

我正在写一个系统调用名称sys_my_time.c ,这将使用 getnstimeofday() .我已经导入了<linux/time.h> .代码如下:

#include <linux/kernel.h>
#include <linux/linkage.h>
#include <linux/time.h>

asmlinkage int sys_my_time() {
struct timespec t;
getnstimeofday(&t);
// ...
return 0;
}

但是编译的时候报错:

CC      kernel/sys_my_time.o
kernel/sys_my_time.c: In function ‘sys_my_time’:
kernel/sys_my_time.c:8:3: error: implicit declaration of function ‘getnstimeofday’ [-Werror=implicit-function-declaration]
getnstimeofday(&t);
^
cc1: some warnings being treated as errors
scripts/Makefile.build:320: recipe for target 'kernel/sys_my_time.o' failed
make[1]: *** [kernel/sys_my_time.o] Error 1
Makefile:1029: recipe for target 'kernel' failed
make: *** [kernel] Error 2

我不知道为什么会发生错误。

附言在 Ubuntu 16.04 中编译内核 V4.14.25

最佳答案

自内核版本 3.17.x 起,getnstimeofday不再由 #include <linux/time.h> 声明.解决方案是添加:

#include <linux/ktime.h>

取决于内核版本,#include <linux/ktime.h>将拉入 getnstimeofday 的声明来自 <linux/time.h> (3.17.x 之前)或来自 <linux/timekeeping.h> (从 3.17.x 开始)。无需包括 <linux/timekeeping.h>直接。

请注意 <linux/ktime.h>从 Linux 内核 2.6.16 开始可用。

您可以删除您的 #include <linux/time.h>如果那里没有其他东西你需要使用。通过删除该行并为任何内核 3.17.x 或更高版本构建代码来测试这一点。

关于c - 当包含 <linux/time.h> 时,“getnstimeofday”是系统调用中的隐式声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50349294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com