首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数‘bpf’的隐式声明

函数‘bpf’的隐式声明
EN

Stack Overflow用户
提问于 2019-02-22 15:27:04
回答 1查看 908关注 0票数 6

我最近一直在研究BPF,但由于一个非常基本的问题,它没有进展。

我像man bpf(2)中描述的那样包含了linux/bpf.h,但是GCC找不到bpf函数。这段代码只是为了测试一下,以确保GCC可以找到bpf函数。

代码语言:javascript
复制
#include <linux/bpf.h>

int main()
{
    bpf(0,(void *)0,0);
    return 0;
}

GCC的输出是这样的。

代码语言:javascript
复制
$ 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函数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-22 16:54:26

手册页记录了系统调用bpf。虽然这并不直观,但实际上在标题<linux/bpf.h>中并没有定义简单地称为bpf()的函数。相反,您可以使用syscall(__NR_bpf, ...) (另请参阅man syscall)执行间接系统调用。

依赖于此syscall的项目通常定义如下所示的包装器:

代码语言:javascript
复制
int bpf(enum bpf_cmd cmd, union bpf_attr *attr, unsigned int size)
{
    return syscall(__NR_bpf, cmd, attr, size);
}

这是an example from libbpf

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54822072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档