libbpf: sec 'xxx': failed to find program symbol at offset 0

在在使用libbpf的时候出现下面的错误,libbpf: sec 'xdp': failed to find program symbol at offset 0,
原因是ubunut默认安装的llvm为6.0版本的生成的.o文件没有函数的符号表。

 llvm-readelf-10 -symbols xdp_pass_kern.o |grep xdp
    24: 0000000000000000     0 SECTION LOCAL  DEFAULT     3 xdp
    30: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT     3 xdp_prog_simple

安装新clang10,修改编译器为clang10,问题解决。
安装clang10:
添加key:

wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add -

添加源:

sudo vim /etc/apt/source.list.d/llvm-10.list
sudo apt update

安装:

sudo apt install clang-10

安装 AST.h 等头文件

sudo apt install libclang-10-dev

配置为默认的clang

sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-10 10000
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-10 10000
sudo update-alternatives --install /usr/bin/llvm-config llvm-config /usr/bin/llvm-config-10 10000

参考文档
Latest libbpf fails to load programs compiled with old LLVM

欢迎评论交流
原文地址:https://www.cnblogs.com/linengier/p/14376800.html