Estoy tratando de compilar el programa bpf de muestra en el código fuente de Linux. Así que descargué el código fuente actual del kernel e ingresé a la carpeta samples/bpf
apt source linux cd linux-*/samples/bpfLuego traté de compilar un programa de muestra con 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. Y no puedo encontrar bpf/bpf.h con apt-file
# apt-file find bpf/bpf.h (no output)¿Que está mal?
Las muestras de Linux eBPF vienen con un Makefile bastante largo. Maneja muchos casos y se integra bien con el flujo de trabajo de construcción del kernel, pero hace que sea más complicado construir las muestras fuera del árbol del kernel.
Por ejemplo, este Makefile agrega una serie de directorios incluidos, como TPROGS_CFLAGS += -I$(srctree)/tools/lib/ , lo que significa que bpf/bpf.h no se obtendrá de las bibliotecas de su sistema operativo sino de tools/lib/ bajo su repositorio de kernel.
Aquí hay algunas opciones que puede considerar para compilar su programa:
tprogs-y .sudo make -C tools/lib/bpf install ) o desde su espejo GitHub . Esto debería instalar los encabezados, y gcc debería poder encontrarlos.gcc -I <path/to/linux>/tools/lib ).#include <bpf/bpf.h> para que apunte a su biblioteca).