Где хранятся файлы include-Ubuntu Linux, GCC

Итак, когда мы делаем следующее:

#include <stdio.h>

и

#include "myFile.h"

компилятор, GCC в моем случае, знает, где это stdio.ч (и даже объектный файл) находятся на моем жестком диске. Он просто использует файлы без моего взаимодействия.

Я думаю что на моей машине Ubuntu Linux файлы хранятся в /usr/include/. откуда компилятор знает, где искать эти файлы? это настраивается или это просто ожидаемый дефолт? Где я буду искать эту конфигурацию?

поскольку я задаю вопрос об этих файлах include, каковы источники файлов? Я знаю, что это может быть нечетким в сообществе Linux, но кто управляет ими? Кто будет предоставлять и управлять теми же файлами для компилятора Windows.

мне всегда казалось, что они пришел с компилятором, но это было предположение...

4 ответов


смотрите здесь: Путь Поиска

резюме:

#include <stdio.h>

когда файл include находится в скобках, препроцессор сначала ищет пути, указанные через флаг. Затем он ищет стандартные пути включения (см. ссылку выше и используйте - v флаг для тестирования в вашей системе).

#include "myFile.h"

когда файл include находится в кавычках, препроцессор сначала ищет в текущем каталоге, а затем пути, указанные -iquote, потом пути, затем стандартные пути.

-nostdinc может использоваться для предотвращения препроцессора от поиска стандартных путей вообще.

переменные среды также можно использовать для добавления путей поиска.

при компиляции, если вы используете - v флаг вы можете увидеть используемые пути поиска.


gcc-это богатая и сложная программа "оркестровки", которая вызывает многие другие программы для выполнения своих обязанностей. С конкретной целью увидеть, где #include "goo" и #include <zap> будет искать в вашей системе, я рекомендую:

$ touch a.c
$ gcc -v -E a.c
 ...
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /usr/lib/gcc/i686-apple-darwin9/4.0.1/include
 /usr/include
 /System/Library/Frameworks (framework directory)
 /Library/Frameworks (framework directory)
End of search list.
# 1 "a.c"

это один из способов увидеть списки поиска для включенных файлов, включая (если таковые имеются) каталоги, в которые #include "..." будет выглядеть, но #include <...> не будет. Этот конкретный список, который я показываю, на самом деле находится на Mac OS X (он же Дарвин), но команды, которые я рекомендую, покажут вам списки поиска (а также интересные детали конфигурации, которые Я заменил на ... здесь; -) на любой системе, на которой gcc работает правильно.


Карл ответил на ваш вопрос о пути поиска, но что касается "источника файлов", следует знать, что если вы установите libfoo пакет и хотите сделать с ним некоторую разработку (т. е. использовать его заголовки), вам также нужно будет установить libfoo-dev. Стандартные файлы заголовков библиотек уже находятся в /usr/include, как вы видели.

обратите внимание, что некоторые библиотеки с большим количеством заголовков будут устанавливать их в подкаталог, например,/usr/include/openssl. Чтобы включить один из них, просто предоставьте путь без /usr/include, например:

#include <openssl/aes.h>

на \#include файлы gcc хранятся в /usr/include . Стандартные include файлы g++ хранятся в /usr/include/c++.