У меня есть программа, которая включает следующие заголовочные файлы:
#include <linux/bpf.h>
#include <linux/in.h>
#include <linux/if_ether.h>
#include <linux/ip.h>
Я использую clang
для компиляции программы, с этими добавленными путями включения:
LINUXINCLUDE = -I. \
-I/usr/src/linux-headers-5.3.0-28/include \
-I/usr/include \
-I/usr/src/linux-headers-5.3.0-28/arch/x86/include \
-I/usr/src/linux-headers-5.3.0-28/include/uapi \
-I/usr/src/linux-headers-5.3.0-28/include/uapi/linux \
-I/usr/src/linux-headers-5.3.0-28/include/uapi/asm-generic \
-I/usr/include/linux
Затем я получите эту ошибку:
> In file included from xdpsock_kern.c:1: In file included from
> /usr/src/linux-headers-5.3.0-28/include/linux/bpf.h:9: In file
> included from
> /usr/src/linux-headers-5.3.0-28/include/linux/workqueue.h:9: In file
> included from /usr/src/linux-headers-5.3.0-28/include/linux/timer.h:6:
> In file included from
> /usr/src/linux-headers-5.3.0-28/include/linux/ktime.h:24: In file
> included from /usr/src/linux-headers-5.3.0-28/include/linux/time.h:6:
> In file included from
> /usr/src/linux-headers-5.3.0-28/include/linux/seqlock.h:36: In file
> included from
> /usr/src/linux-headers-5.3.0-28/include/linux/spinlock.h:51: In file
> included from
> /usr/src/linux-headers-5.3.0-28/include/linux/preempt.h:78: In file
> included from
> /usr/src/linux-headers-5.3.0-28/arch/x86/include/asm/preempt.h:7: In
> file included from
> /usr/src/linux-headers-5.3.0-28/include/linux/thread_info.h:13: In
> file included from
> /usr/src/linux-headers-5.3.0-28/include/linux/restart_block.h:10: In
> file included from
> /usr/src/linux-headers-5.3.0-28/include/linux/time64.h:10: In file
> included from
> /usr/src/linux-headers-5.3.0-28/include/uapi/linux/time.h:6:
> /usr/src/linux-headers-5.3.0-28/include/uapi/linux/time_types.h:8:2:
> error: unknown type name '__kernel_time64_t'
> __kernel_time64_t tv_sec; /* seconds */
Я не знаю, какая стратегия правильная, но для 10 последних ошибок, которые я уже решил, я просто добавил необходимые пути включения.
К сожалению, я не не знаю, почему time_types.h
ожидает тип __kernel_time64_t
, хотя сам заголовок не импортирует posix_types.h
, где этот тип определен (https://elixir.bootlin.com/linux/v4.18.20/source/include/uapi/asm-generic/posix_types.h#L90)
Любые идеи, как я могу решить это проблема?