Подтвердить что ты не робот

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

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

#include <stdio.h>

против

#include "myFile.h"

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

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

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

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

4b9b3361

Ответ 1

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

Резюме:

#include <stdio.h>

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

#include "myFile.h"

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

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

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

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

Ответ 2

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 (aka Darwin), но рекомендуемые мной команды покажут вам списки поиска (а также интересные детали конфигурации, которые я заменил на ... здесь;-) на любом система, на которой gcc работает правильно.

Ответ 3

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

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

#include <openssl/aes.h>

Ответ 4

Файлы \#include gcc хранятся в /usr/include. Стандарт включает файлы g++, хранящиеся в /usr/include/c++.