C 函数的隐式声明';条件重新调整';在包含的标题中定义为宏的

C 函数的隐式声明';条件重新调整';在包含的标题中定义为宏的,c,linux-kernel,declaration,implicit,C,Linux Kernel,Declaration,Implicit,我正在尝试构建一个内核,其中包含一些影响相同文件的补丁,并且存在问题。 生成时,我收到一个错误: arch/x86/include/asm/uaccess_64.h:在函数“copy_from_user”中:arch/x86/include/asm/uaccess_64.h:81:2:错误:函数“cond_resched”的隐式声明[-Werror=隐式函数声明] 首先,我遵循代码,发现指向的字符串是: 如果(访问正常(验证读取、从、n)) access\u ok(…)是文件uaccess.h中

我正在尝试构建一个内核,其中包含一些影响相同文件的补丁,并且存在问题。 生成时,我收到一个错误:

arch/x86/include/asm/uaccess_64.h:在函数“copy_from_user”中:arch/x86/include/asm/uaccess_64.h:81:2:错误:函数“cond_resched”的隐式声明[-Werror=隐式函数声明]

首先,我遵循代码,发现指向的字符串是:

如果(访问正常(验证读取、从、n))

access\u ok(…)
是文件uaccess.h中的一个宏,它包括
cond\u resched()
调用。
实际的
cond_resched()
调用在
linux/sched.h
中定义,并包含在
uaccess.h
文件中。我还试图将其包含到
uaccess_64.h
文件中,但没有任何帮助。所以我不知道如何隐式声明它。

您可能有一个循环头文件依赖项,或者可能需要的文件被有条件地排除。请尝试
gcc-H
查看哪些文件是
#包括
d where,以及
gcc-E
查看预处理后的文件。如果不知道修补程序是什么,这确实会有所帮助,但听起来修补程序可能已损坏,或者是针对不同版本的内核,或者是类似的。(我已经将你的标签编辑为“linux内核”,因为这更合适)。补丁是PAX和RT linux,适用于适当版本的内核(3.6.11)。我正在使用
rpmbuild
,所以我设法添加了
-H
标志,并发现在出错之前没有
linux/sched.H
,我目前无法添加
-E
标志(一些
fixdep
可执行文件无法执行,因为它是使用
-rw
权限默认创建的,我目前无法更改)。