Где хранятся файлы include-Ubuntu Linux, GCC
Итак, когда мы делаем следующее:
#include <stdio.h>
и
#include "myFile.h"
компилятор, GCC в моем случае, знает, где этот stdio.ч (и даже объектный файл) находятся на моем жестком диске. Он просто использует файлы без взаимодействия со мной.
Я думаю что на моей машине Ubuntu Linux файлы хранятся в /usr/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 "..."будет выглядеть, но ... здесь; -) на любой системе, на которой gcc работает правильно.
Карл ответил на ваш вопрос о пути поиска, но что касается "источника файлов", то нужно знать, что если вы установите
libfooпакет и хотите сделать некоторые разработки с ним (т. е. использовать его заголовки), вам также нужно будет установитьlibfoo-dev. Стандартные заголовочные файлы библиотеки уже находятся в/usr/include, как вы видели.обратите внимание, что некоторые библиотеки с большим количеством заголовков установят их в подкаталог, например,
/usr/include/openssl. Чтобы включить один из них, просто предоставьте путь без/usr/include, например:#include <openssl/aes.h>
The
\#includeфайлы gcc хранятся в/usr/include. Стандартные включенные файлы g++ хранятся в/usr/include/c++.
Comments