函数“bpf”的隐式声明
implicit declaration of function ‘bpf’
最近在研究BPF,但是因为一个很基础的问题没有进行
我按照 man bpf(2) 中的描述包含了 linux/bpf.h,但是 GCC 找不到 bpf 函数。这段代码只是为了确保GCC能找到bpf函数的测试。
#include <linux/bpf.h>
int main()
{
bpf(0,(void *)0,0);
return 0;
}
GCC 输出是这样的。
$ gcc -o test bpf.c
bpf.c: In function ‘main’:
bpf.c:5:2: warning: implicit declaration of function ‘bpf’ [-Wimplicit-function-declaration]
bpf(0,(void *)0,0);
^~~
/usr/bin/ld: /tmp/cc4tjrUh.o: in function `main':
bpf.c:(.text+0x19): undefined reference to `bpf'
collect2: error: ld returned 1 exit status
我正在使用 Archlinux 并且 linux 内核版本是 4.20.11-arch1-1-ARCH。
请帮助我如何包含 bpf 函数。
手册页记录了系统调用 bpf
。虽然这不直观,但实际上 header <linux/bpf.h>
中并没有定义简单称为 bpf()
的函数。相反,您可以使用 syscall(__NR_bpf, ...)
进行间接系统调用(另请参阅 man syscall
)。
依赖此系统调用的项目通常定义如下所示的包装器:
int bpf(enum bpf_cmd cmd, union bpf_attr *attr, unsigned int size)
{
return syscall(__NR_bpf, cmd, attr, size);
}
最近在研究BPF,但是因为一个很基础的问题没有进行
我按照 man bpf(2) 中的描述包含了 linux/bpf.h,但是 GCC 找不到 bpf 函数。这段代码只是为了确保GCC能找到bpf函数的测试。
#include <linux/bpf.h>
int main()
{
bpf(0,(void *)0,0);
return 0;
}
GCC 输出是这样的。
$ gcc -o test bpf.c
bpf.c: In function ‘main’:
bpf.c:5:2: warning: implicit declaration of function ‘bpf’ [-Wimplicit-function-declaration]
bpf(0,(void *)0,0);
^~~
/usr/bin/ld: /tmp/cc4tjrUh.o: in function `main':
bpf.c:(.text+0x19): undefined reference to `bpf'
collect2: error: ld returned 1 exit status
我正在使用 Archlinux 并且 linux 内核版本是 4.20.11-arch1-1-ARCH。 请帮助我如何包含 bpf 函数。
手册页记录了系统调用 bpf
。虽然这不直观,但实际上 header <linux/bpf.h>
中并没有定义简单称为 bpf()
的函数。相反,您可以使用 syscall(__NR_bpf, ...)
进行间接系统调用(另请参阅 man syscall
)。
依赖此系统调用的项目通常定义如下所示的包装器:
int bpf(enum bpf_cmd cmd, union bpf_attr *attr, unsigned int size)
{
return syscall(__NR_bpf, cmd, attr, size);
}