В чем разница между / usr / include / linux и / usr / include / x86_64-linux-gnu / - PullRequest
0 голосов
/ 09 сентября 2018

Я очень новичок в нативном программировании на C и сейчас пытаюсь настроить мою IDE для правильной настройки путей включения. Поскольку я хотел бы перемещаться по sys/xxx.h файлам, я добавил

/usr/include/x86_64-linux-gnu/

к моему пути включения. Но есть также /usr/include/linux, который, кажется, содержит те же заголовки. Так в чем же разница между ними? И какой из них я должен использовать на самом деле?

1 Ответ

0 голосов
/ 09 сентября 2018

Я могу сразу сказать вам, что каталоги /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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...