我正在嘗試在 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.
而我無法找到bpf/bpf.h與apt-file
# apt-file find bpf/bpf.h
(no output)
哪里錯了?
uj5u.com熱心網友回復:
您需要安裝libbpf:
git clone --depth 1 https://github.com/libbpf/libbpf
cd src
sudo make install
uj5u.com熱心網友回復:
Linux eBPF 示例帶有一個相當長的 Makefile。它處理了很多情況并與內核構建作業流很好地集成,但是在內核樹之外構建樣本變得更加復雜。
例如,這個 Makefile 添加了許多包含目錄,例如TPROGS_CFLAGS = -I$(srctree)/tools/lib/,這意味著bpf/bpf.h不會從您的作業系統的庫中提取,而是從tools/lib/您的內核存盤庫下提取。
您可以考慮以下幾個選項來編譯您的程式:
- 調整現有的 Makefile 以使用它來構建您自己的程式,例如通過將您的內核代碼添加到
tprogs-y目標。 - 從內核存盤庫 (
sudo make -C tools/lib/bpf install) 或其GitHub 鏡像安裝 libbpf 。這應該安裝標頭,然后 gcc 應該能夠找到它們。 - 調整您的編譯選項以告訴 gcc 在哪里查找標題 (
gcc -I <path/to/linux>/tools/lib)。 - (調整包含路徑
#include <bpf/bpf.h>以使其指向您的庫。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/344209.html
