请在下面找到我的代码。 我收到错误" /usr/include/linux/sysctl.h:40:2:错误:未知类型名称'size_t'"
在线搜索,唯一的建议是确保您的代码中包含stddef.h,我可以在下面看到。在我已尝试过的修复程序之外似乎没有可用的解决方案,因此我目前对如何继续前进感到不知所措。
另请注意,此代码并不漂亮,但这不是此主题的主要问题。我得到的错误看起来并不是因为我的代码中的错误而被抛出,但我可能错了。
#include <linux/netfilter_ipv4.h>
#include <linux/netfilter.h>
#include <linux/ip.h>
#include <linux/tcp.h>
#include <sys/types.h>
#include <linux/module.h>
#include <stddef.h>
struct nf_hook_ops{
struct list_head *list;
nf_hookfn *hook;
struct module *owner;
u_int8_t pf;
unsigned int hooknum;
int priority; /* Hooks are ordered in ascending priority. */
};
int nf_register_hook(struct nf_hook_ops *reg);
void nf_unregister_hook(struct nf_hook_ops *reg);
struct nf_hook_ops nfho = {
nfho.hook = hook_func_in,
nfho.hooknum = NF_INET_LOCAL_IN,
nfho.pf = PF_INE,
nfho.priority = NF_IP_PRI_FIRST
};
nf_register_hook(&nfho); // Register the hook
答案 0 :(得分:6)
C严格从上到下进行解析,#include
执行纯文本包含,而不是任何有资格获得“模块导入”名称的聪明人。因此,#include
指令的顺序很重要。在这种情况下,您收到有关stddef.h
定义的类型的投诉,因此您必须确保之前包含<{1}} ,是)另一个头文件。
我可以使用以下两行源文件重现您所获得的错误:
stddef.h
→
#include <linux/sysctl.h>
#include <stddef.h>
如果我更换$ gcc -fsyntax-only test.c
In file included from test.c:1:0:
/usr/include/linux/sysctl.h:39:2: error: unknown type name ‘size_t’
行的顺序,
#include
然后没有错误。这是#include <stddef.h>
#include <linux/sysctl.h>
中的一个错误,但我不会屏住呼吸来修复它。我建议将linux/sysctl.h
移到包含列表的最顶部。
我可以不使用您的实际包含列表重现问题
stddef.h
但是#include <linux/netfilter_ipv4.h>
#include <linux/netfilter.h>
#include <linux/ip.h>
#include <linux/tcp.h>
#include <sys/types.h>
#include <linux/module.h>
#include <stddef.h>
转储没有显示gcc -H
被这组包含传递过来,所以可能只是因为我在我的Linux机器上有一个不同版本的内核头文件而不是你做的