Где хранятся файлы 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++
.