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

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

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

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

4b9b3361

Ответ 1

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

$ cat > test.c
#include <stdbool.h>
#include <stdio.h>
^D
$ gcc -H -fsyntax-only test.c
. /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdbool.h
. /usr/include/stdio.h
.. /usr/include/features.h
... /usr/include/x86_64-linux-gnu/bits/predefs.h
... /usr/include/x86_64-linux-gnu/sys/cdefs.h
.... /usr/include/x86_64-linux-gnu/bits/wordsize.h
... /usr/include/x86_64-linux-gnu/gnu/stubs.h
.... /usr/include/x86_64-linux-gnu/bits/wordsize.h
.... /usr/include/x86_64-linux-gnu/gnu/stubs-64.h
.. /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h
.. /usr/include/x86_64-linux-gnu/bits/types.h
... /usr/include/x86_64-linux-gnu/bits/wordsize.h
... /usr/include/x86_64-linux-gnu/bits/typesizes.h
.. /usr/include/libio.h
... /usr/include/_G_config.h
.... /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h
.... /usr/include/wchar.h
... /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h
.. /usr/include/x86_64-linux-gnu/bits/stdio_lim.h
.. /usr/include/x86_64-linux-gnu/bits/sys_errlist.h

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

Ответ 2

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

echo '#include <stdbool.h>' | cpp -H -o /dev/null 2>&1 | head -n1

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

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

. /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h

Ответ 3

locate stdio.h

или

mlocate stdio.h

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

sudo updatedb

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

gcc -print-search-dirs

Ответ 4

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

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

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

cpp Filename.c

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

Ответ 5

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

cd /
find . -name "stdio.h"
find . -name "std*.h"

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

Ответ 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 '{print $3}')/include/stdbool. ч

Ответ 9

Когда я искал (на Fedora 25), я использовал "whereis stdio.h". Для меня это было в /usr/include/stdio.h,/usr/shar/man/man3/stdio.3.gx, Но когда вы ищете файл, используйте whereis или найдите

Ответ 10

Используйте vim, чтобы открыть ваш исходный файл и поместить проклятия в stdio.h, а в обычном режиме команда ' gf ' позволит vim открыть файл stdio.h для вас.

Ctr + g позволит vim отобразить абсолютный путь к stdio.h