gpt4 book ai didi

c++ - Ebpf:助手的 undefined symbol

转载 作者:太空宇宙 更新时间:2023-11-04 11:47:23 25 4
gpt4 key购买 nike

我运行最新的 debian 测试(使用内核 4.19)。

在我的系统上找不到助手(但它们存在于标题中,Qt 跳转到它们)

#include "bpf/bpf.h"

int main (){
int r = bpf_create_map(BPF_MAP_TYPE_ARRAY,1,1,1,0);
return 0;
}

编译结果在

undefined reference to `bpf_create_map(bpf_map_type, int, int, int, unsigned int)'

编译为

g++ -c -pipe -g -std=gnu++1z -Wall -W -fPIC -DQT_QML_DEBUG -I. -I../../Qt/5.13.0/gcc_64/mkspecs/linux-g++ -o main.o main.cpp
g++ -lbpf -o server main.o

同样的结果

g++ main.cpp -lbpf -o out

我也安装了 libbpf-dev 并且我有相关的库(a 和 so)。

怎么了?

更新

即使是下面的代码也行不通

#include <linux/bpf.h>

int main (){

//int r = bpf_create_map(BPF_MAP_TYPE_ARRAY,1,1,1,0);
bpf_attr attr = {};
attr.map_type = BPF_MAP_TYPE_ARRAY;
attr.key_size = 1;
attr.value_size = 1;
attr.max_entries = 1;

bpf(BPF_MAP_CREATE, &attr, sizeof(attr));
return 0;
}

结果

error: 'bpf' was not declared in this scope

更新2:

顺便说一句, key 大小必须是 4 而不是 1;但撇开这一点,这与我这里的问题无关。

最佳答案

由于在 C++ 中编译而导致的命名空间问题,您可能想要:

extern "C" {
#include "bpf/bpf.h"
}

int main()...

关于你的第二个错误(error: 'bpf' was not declared in this scope),这与 libbpf 没有直接关系,这是因为没有函数简单地称为 bpf( ) 实际执行系统调用。相反,您必须使用系统调用编号。例如,libbpf 定义了以下内容:

static inline int sys_bpf(enum bpf_cmd cmd, union bpf_attr *attr,
unsigned int size)
{
return syscall(__NR_bpf, cmd, attr, size);
}

... 然后使用 sys_bpf(),就像您尝试在示例中调用 bpf() 一样。

郑重声明,“BPF helpers”通常指的是您从 BPF 程序中调用的 BPF 函数,但此处并非如此。因此,我相信评论中有些困惑。

关于c++ - Ebpf:助手的 undefined symbol ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57215004/

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