Я могу сразу сказать вам, что каталоги /usr/include/linux
и /usr/include/asm
никогда не должны включаться в список каталогов системных заголовков. Заголовки в этих каталогах предназначены для использования как #include <linux/whatever.h>
или #include <asm/whatever.h>
, а не как #include <whatever.h>
.
Остальная часть ответа на этот вопрос зависит от того, какой именно «дистрибутив» Linux вы используете, поэтому я не могу просто сказать это. К счастью, есть способ заставить компилятор сообщить вам. Выполните эту команду (в точности как показано) в окне терминала:
LC_ALL=C gcc -v -xc -E /dev/null 2>&1 |
sed -ne '/search starts here/,/End of search list/p'
Вы получите вывод, который выглядит примерно так, но детали могут немного отличаться:
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/x86_64-linux-gnu/8/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed
/usr/include/x86_64-linux-gnu
/usr/include
End of search list.
Перечисленные каталоги - это каталоги, в которых вы должны сконфигурировать свою среду IDE для поиска системных заголовков, с целью поиска объявлений и тому подобного. Однако вы должны , а не сконфигурировать вашу IDE для передачи любого из этих каталогов в компилятор как -I
каталогов. Он уже знает, как их использовать, его не нужно повторять, и повторение этого может привести к путанице (например, порядок вышеуказанных каталогов имеет значение).
Как программист приложения, вам не нужно беспокоиться о том, какие заголовки «принадлежат» каким каталогам. Это полностью задача разработчиков компилятора и библиотеки C, а также сопровождающих дистрибутивов Linux.