gpt4 book ai didi

bpf - 函数 ‘bpf’ 的隐式声明

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

我最近一直在研究 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 .虽然这并不直观,但实际上并没有在标题 <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);
}

这是 an example from libbpf .

关于bpf - 函数 ‘bpf’ 的隐式声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54822072/

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