簡體   English   中英

無法編譯示例 bpf 程序,缺少 bpf/bpf.h

[英]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/在您的內核存儲庫下。

您可以考慮以下幾個選項來編譯您的程序:

  • 調整現有的 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>的包含路徑,使其指向您的庫。)

如果您安裝libbpf-dev軟件包,它會提供<bpf/bpf.h>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM