Где хранятся заголовочные файлы linux

Содержание
  1. [C-Linux] Где лежат самые кошерные заголовочные файлы
  2. Русские Блоги
  3. Путь поиска для заголовочных файлов и библиотек Linux
  4. 1.1 В какую папку устанавливаются библиотечные файлы .so и заголовочные файлы .h при установке glibc, как gcc может правильно найти соответствующие папки?
  5. 1.2 Каковы пути поиска библиотеки ссылок, когда программа связана?
  6. 1.3 Когда программа работает, каковы пути поиска в библиотеке динамических ссылок?
  7. 1.4. Каковы пути поиска заголовочных файлов при компиляции программы?
  8. 1.5. При настройке кросс-компилятора, каковы конфигурации пути поиска?
  9. 2. Пример операции
  10. 2.1, путь поиска библиотеки при связывании
  11. 2.2, место поиска библиотеки динамической загрузки во время выполнения
  12. 2.3 Каковы пути поиска заголовочных файлов при компиляции программы?
  13. Как я могу найти заголовочные файлы языка программирования C в Linux?
  14. ОТВЕТЫ
  15. Ответ 1
  16. Ответ 2
  17. Ответ 3
  18. Ответ 4
  19. Ответ 5
  20. Ответ 6
  21. Ответ 7
  22. Ответ 8

[C-Linux] Где лежат самые кошерные заголовочные файлы

Решил навести порядок в голове. Вот к примеру пользуюсь я функцией ioctl, мне нужна она сама, плюс дефайны соответствующих операций.

Теперь вопросы:
1. Какой каталог полнее?
2. Какой каталог использовать правильнее?
3. Нафига два каталога?

правильно использовать то что в мане написано.

А вот какого хрена всё именно так устроено (там куча других чудес) у меня тоже вызывает вопросы. Для меня всё это очень непрозрачно.

Если ты не строишь свой собственный дистрибутив, свой тулчейн, и не делаешь что-то странное, то надо использовать стандартные пути компилятора.

То есть то, что в /usr/include, то, что выдает pkg-config пакет —cflags, и тп. Руками в эту кухню чучше не лезть. Используй стандарты, man’ы и прочее. Если интересно, что использует компилятор, добавь -v в командную строку.

А вообще, то, что лежит в исходниках ядра и в так называемых «linux-headers» и тп — оно не предназначено для использования напрямую юзерспейсом, glibc при сборке там обработку делает, скрипты гоняет и генерит своих хедеров. То есть нужно использовать продукт обработки glibc и потом gcc, обычно сидящий в /usr/include.

в данном случае — «/usr/include/linux/fs.h» (
), т.к. это «первоисточник» константы BLKGETSIZE.

Тут нету кошерных заголовочных файлов. Это линукс.

Предлагаешь самому объявлять константы и прототипы?

Я предлагаю открыть мануал и подключить sys/ioctl.h

Тут нету кошерных заголовочных файлов. Это линукс.

Это по твоему кошерно? Линукс по сравнении с этим безумием — идеален

Источник

Русские Блоги

Путь поиска для заголовочных файлов и библиотек Linux

Эта статья перенесена с: https://blog.csdn.net/pwl999/article/details/78219374

1.1 В какую папку устанавливаются библиотечные файлы .so и заголовочные файлы .h при установке glibc, как gcc может правильно найти соответствующие папки?

Когда мы устанавливаем –prefix = / path / при сборке gcc, gcc устанавливается в / path /. По умолчанию gcc будет искать библиотеки в / path / lib / и искать файлы заголовков в / path / include /.
Например, в обычных системах Linux и gcc, и glibc установлены в каталоге / usr /, поэтому исполняемый файл gcc находится в каталоге / usr / bin, а файл библиотеки glibc находится в / usr / lib В этом каталоге файл заголовка glibc находится в каталоге / usr / include.
Разумеется, указанное выше соотношение не является точным и может быть указано вручную при установке gcc и glibc. Вы можете использовать команду «gcc -print-search-dirs» для просмотра пути поиска библиотеки gcc:

Читайте также:  Uefi bios установка линукс

Вы можете использовать следующие методы, чтобы изменить путь к библиотеке и файлу заголовка, который gcc ищет по умолчанию:

  • (1) Используйте «gcc -nostdlib -Lusrlibpath», чтобы изменить путь поиска библиотеки по умолчанию для gcc, и используйте «gcc -nostdinc -Iusrincpath», чтобы изменить путь поиска заголовка по умолчанию для gcc.
  • (2) Используйте «gcc -Wl, -sysroot =», чтобы изменить путь поиска библиотеки по умолчанию для gcc.
  • (3) Измените файл спецификации gcc, чтобы настроить любые параметры gcc.

Спецификации — это файлы конфигурации gcc. Этот метод модификации является самым мощным, но он также является самым сложным и рискованным, поскольку файл спецификации gcc неясен и труден для понимания. Пока я не буду изменять его, но сначала я расскажу о существовании этого метода.
Используйте команду «gcc -v», чтобы просмотреть путь к спецификациям gcc:

В некоторых установках gcc используются встроенные спецификации, но нет внешних файлов спецификаций:

Для встроенной спецификации вы можете использовать команду «gcc -dumpspecs» для просмотра содержимого конкретной спецификации:

Вы также можете использовать «gcc -specs =», чтобы указать файл спецификации gcc.

  • (4) Передается ли конфигурация gcc по умолчанию командой configure во время сборки?

Используйте команду «gcc -v» для просмотра значения конфигурации gcc. Параметры конфигурации описаны в файле gcc-4.1.0 \ gcc \ doc \ install.texi.

1.2 Каковы пути поиска библиотеки ссылок, когда программа связана?

При связывании конфигурация пути поиска библиотеки имеет следующие методы: (Для конкретного использования, пожалуйста, обратитесь к описанию в главе примера)

  • (1) Используйте «gcc -Llibpath -llibname», чтобы указать путь поиска библиотеки ссылок.
  • (2) Используйте переменную среды «LIBRARY_PATH», чтобы указать путь поиска библиотеки ссылок.
  • (3) Используйте «SEARCH_DIR» в сценарии подключения ld, чтобы указать путь поиска библиотеки ссылок.

1.3 Когда программа работает, каковы пути поиска в библиотеке динамических ссылок?

При связывании конфигурация пути поиска библиотеки имеет следующие методы: (Для конкретного использования, пожалуйста, обратитесь к описанию в главе примера)

  • (1) При компиляции используйте «gcc -Wl, -rpath», чтобы указать путь поиска библиотеки динамических ссылок во время выполнения, и жестко запишите его в опцию «RPATH» файла ELF.
  • (2) Переменная среды «LD_RUN_PATH» используется для указания пути поиска библиотеки динамических ссылок во время компиляции, и она жестко задана в опции «RPATH» файла ELF.
  • (3) Используйте переменную среды «LD_LIBRARY_PATH», чтобы указать путь поиска библиотеки динамических ссылок во время выполнения.
  • (4) Используйте файл конфигурации «/etc/ld.so.conf», чтобы указать путь поиска библиотеки динамических ссылок во время выполнения.
  • (5) Используйте путь поиска по умолчанию «/ lib, / usr / lib» библиотеки динамических ссылок во время выполнения.

1.4. Каковы пути поиска заголовочных файлов при компиляции программы?

При компиляции конфигурация пути поиска файла заголовка имеет следующие методы: (Для конкретного использования, пожалуйста, обратитесь к описанию в главе примера)

  • (1) Используйте «gcc -I incpath», чтобы указать путь поиска файла заголовка во время компиляции.
  • (2) Используйте переменную окружения «C_INCLUDE_PATH», чтобы указать путь поиска файла заголовка во время компиляции.
  • (3) Использовать путь поиска заголовка gcc по умолчанию при компиляции.
Читайте также:  Software microsoft windows currentversion explorer desktop namespace

Описание общих каталогов заголовочных файлов:

/ usr / src / linux / — это путь к исходному коду ядра, а / usr / src / linux / include содержит заголовочный файл ядра, который обычно используется при компиляции модуля.

Путь / usr / include — это в основном заголовочный файл glibc, который используется для компиляции файлов пользовательского режима. Однако / usr / include также содержит папки linux / и asm /, необходимые для заголовочных файлов ядра, но эти две папки в основном используются для совместимости, а / usr все еще используется для заголовочных файлов ядра. / SRC / Linux / включить.

1.5. При настройке кросс-компилятора, каковы конфигурации пути поиска?

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

  • (1) Путь к файлу библиотеки, связанному во время компиляции:

Если не указан, это должен быть путь по умолчанию, связанный с путем установки. Если вы хотите указать, вы можете использовать опцию «LIB_PATH» при компиляции ld в binutils:

  • (2) Путь к заголовочному файлу, используемому во время компиляции:
  • (3) Бинарный путь инструмента, используемый во время компиляции:

Путь двоичного инструмента по умолчанию можно просмотреть с помощью следующей команды:

Используя указанный двоичный инструмент, вы можете использовать опцию «gcc -B»:

  • (4) Путь и имя динамического загрузчика, указанного во время компиляции:

Путь и имя динамического загрузчика, жестко запрограммированного в elf, указанного в файле спецификации gcc:

2. Пример операции

Создайте два .c файла:

2.1, путь поиска библиотеки при связывании

Скомпилируйте say.c в libsay.so, а затем скомпилируйте libsay.so при компиляции test.c, чтобы проверить путь поиска в библиотеке, когда gcc связан.

  • (1) Используйте «gcc -Llibpath -llibname», чтобы указать путь поиска библиотеки ссылок:

(2) Используйте переменную среды «LIBRARY_PATH», чтобы указать путь поиска библиотеки ссылок:

(3) Используйте «SEARCH_DIR» в сценарии подключения ld, чтобы указать путь поиска библиотеки ссылок:

Используйте команду «ld -verbose», чтобы просмотреть параметр SEARCH_DIR в скрипте ссылок gcc по умолчанию. Конечно, вы также можете использовать «ld -Txxx.lds», чтобы указать скрипт связи.

Скопируйте libsay.so в указанный путь SEARCH_DIR и свяжите тест:

2.2, место поиска библиотеки динамической загрузки во время выполнения

  • (1) Используйте «gcc -Wl, -rpath», чтобы указать путь поиска библиотеки динамических ссылок во время выполнения, и жестко закодируйте в ELF-файл параметр «RPATH»:

Используйте файл readelf для просмотра жестко заданного пути поиска библиотеки времени выполнения в файле elf:

  • (2) Используйте переменную среды «LD_RUN_PATH», чтобы указать путь поиска библиотеки динамических ссылок во время компиляции, и жестко запишите ее в опцию «RPATH» файла ELF:

  • (3) Используйте переменную среды «LD_LIBRARY_PATH», чтобы указать путь поиска библиотеки динамических ссылок во время выполнения:
Читайте также:  Booting windows from usb hdd

(4) Используйте файл конфигурации «/etc/ld.so.conf», чтобы указать путь поиска библиотеки динамических ссылок во время выполнения:

(5) Используйте путь поиска по умолчанию «/ lib, / usr / lib» библиотеки динамических ссылок во время выполнения:

Создайте файл .c и файл .h:

2.3 Каковы пути поиска заголовочных файлов при компиляции программы?

(1) Используйте «gcc -I incpath», чтобы указать путь поиска файла заголовка во время компиляции:

(2) Используйте переменную окружения «C_INCLUDE_PATH», чтобы указать путь поиска файла заголовка во время компиляции:

  • (3) Использовать путь поиска заголовка gcc по умолчанию при компиляции:

Метод настройки пути поиска файла заголовка Gcc по умолчанию не уточнен. Но вы можете использовать следующую команду для просмотра:

Используйте путь по умолчанию для компиляции:

Источник

Как я могу найти заголовочные файлы языка программирования C в Linux?

Когда я пишу программы C в Linux, а затем компилирую их с помощью gcc, мне всегда интересно, где эти файлы заголовков. Например, где stdio.h . В более общем плане, где stdbool.h ?

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

ОТВЕТЫ

Ответ 1

gcc -H . будет печатать полный путь каждого включаемого файла в качестве побочного эффекта обычной компиляции. Используйте -fsyntax-only в дополнение к тому, чтобы не создавать какой-либо вывод (он все равно скажет вам, есть ли в вашей программе ошибки). Пример (Linux, gcc-4.7):

Точки в начале каждой строки подсчитывают, насколько глубоко вложен #include .

Ответ 2

Если вы используете gcc, вы можете проверить конкретный файл с чем-то вроде:

-H просит препроцессор рекурсивно печатать все включенные файлы. head -n1 берет только первую строку вывода из этого, чтобы игнорировать любые файлы, включенные именованным заголовком (хотя, вероятно, stdbool.h, вероятно, не работает).

На моем компьютере, например, выходы выше:

Ответ 3

но locate полагается на базу данных, если вы ее никогда не обновляли

вы также можете запросить gcc , чтобы узнать, какие каталоги по умолчанию сканируются самим gcc :

Ответ 4

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

мы можем проверить его, используя команду «CPP» — C PreProcessor.

Например, в командной строке

Он отобразит предварительно обработанный вывод.

Ответ 5

Один подход, если вы знаете имя файла include, будет использовать find:

Это займет некоторое время, когда оно проходит через все каталоги.

Ответ 6

Используйте gcc -v , и вы можете проверить путь включения. Обычно включенные файлы находятся в /usr/include или /usr/local/include в зависимости от установки библиотеки.

Ответ 7

Большинство стандартных заголовков хранятся в /usr/include . Похоже, что stdbool.h хранится где-то в другом месте и зависит от того, какой компилятор вы используете. Например, g++ хранит его в /usr/include/c++/4.7.2/tr1/stdbool.h , тогда как clang хранит его в /usr/lib/clang/3.1/include/stdbool.h .

Ответ 8

Я думаю, что общий путь:

/usr/lib/gcc/$(ls/usr/lib/gcc/)/$(gcc -v 2 > & 1 | tail -1 | awk ‘‘)/include/stdbool. ч

Источник

Оцените статью