在在使用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