Как включить заголовки из другого каталога (но не зная, какой именно) - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь скомпилировать модуль. Я могу сделать это, вызвав make, который вызывает

make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) modules

Но я хочу увидеть предварительно обработанный вывод, поэтому я пытаюсь скомпилировать вручную с помощью cc -E file.c. Проблема в том, что он не видит заголовок <linux/init.h>:

fatal error: linux/init.h: No such file or directory
 #include <linux/init.h>

У меня есть уведомление, когда вызывается make, он сначала вводит этот каталог /usr/src/linux-headers-5.0.0-38-generic, Возможно, есть заголовок, но я не знаю где. Я попытался gcc -E -I'/usr/src/linux-headers-5.0.0-38-generic file.c, но все еще та же ошибка. Итак, как можно включить заголовки ядра (которые <linux/init.h> is) в режиме пользователя - то есть, как включить заголовки из другого каталога?

PS: как предложено @uzsolt в комментариях, я добавляю include к конец пути: gcc -I /usr/src/linux-headers-5.0.0-38-generic/include. Но тогда отсутствует другой заголовок - <asm/linkage.h>, и снова - я понятия не имею, в каком каталоге находится этот заголовок.

1 Ответ

0 голосов
/ 26 апреля 2020

Вы должны использовать команду find: find /usr/src/linux-headers-5.0.0-38-generic -name MISSED_FILE.

Я не знаю ваш linux дистрибутив, но я думаю, что вы должны добавить эти параметры в gcc:

-I/usr/src/linux-headers-5.0.0-38-generic/include -I/usr/src/linux-aws-headers-5.3.0-1003/arch/x86/include/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...