![](/img/trans.png)
[英]Error while loading a BPF program that copies a buffer to the BPF stack
[英]Can't compile sample bpf program, bpf/bpf.h is missing
我正在嘗試在 Linux 源代碼中編譯示例 bpf 程序。 所以我下載了當前內核源代碼並進入了samples/bpf
文件夾
apt source linux
cd linux-*/samples/bpf
然后我嘗試用 gcc 編譯一個示例程序:
# gcc sock_example.c
sock_example.c:29:10: fatal error: bpf/bpf.h: No such file or directory
29 | #include <bpf/bpf.h>
| ^~~~~~~~~~~
compilation terminated.
而且我無法使用apt-file
找到bpf/bpf.h
# apt-file find bpf/bpf.h
(no output)
哪里錯了?
您需要安裝libbpf :
git clone --depth 1 https://github.com/libbpf/libbpf
cd src
sudo make install
Linux eBPF 示例帶有一個相當長的 Makefile。 它處理了很多情況並與內核構建工作流很好地集成,但是在內核樹之外構建樣本變得更加復雜。
例如,此 Makefile 添加了許多包含目錄,例如TPROGS_CFLAGS += -I$(srctree)/tools/lib/
,這意味着bpf/bpf.h
不會從您的操作系統的庫中提取,而是從tools/lib/
在您的內核存儲庫下。
您可以考慮以下幾個選項來編譯您的程序:
tprogs-y
目標。sudo make -C tools/lib/bpf install
)或其GitHub 鏡像安裝 libbpf。 這應該安裝標頭,然后 gcc 應該能夠找到它們。gcc -I <path/to/linux>/tools/lib
)。#include <bpf/bpf.h>
的包含路徑,使其指向您的庫。)如果您安裝libbpf-dev
軟件包,它會提供<bpf/bpf.h>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.