¿Cómo puedo encontrar los archivos de encabezado del lenguaje de programación C en Linux?

5 minutos de lectura

¿Como puedo encontrar los archivos de encabezado del lenguaje de
Colmillo Yishu

Cuando escribo programas C en Linux y luego los compilo usando gcc, siempre tengo curiosidad por saber dónde están esos archivos de encabezado. Por ejemplo, donde stdio.h es. Más generalmente, ¿dónde está stdbool.h?

Lo que quiero saber no es solo dónde está, sino también cómo llegar a esos lugares, por ejemplo, usando el comando de shell o usando el lenguaje de programación C.

1646752030 22 ¿Como puedo encontrar los archivos de encabezado del lenguaje de
zwol

gcc -H ... imprimirá la ruta completa de cada archivo de inclusión como un efecto secundario de la compilación regular. Utilizar -fsyntax-only además de conseguir que no cree ninguna salida (aún así te dirá si tu programa tiene errores). Ejemplo (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

Los puntos al comienzo de cada línea cuentan cuán profundamente anidado está el #include es.

  • Gracias por la gran respuesta. He estado un poco confundido acerca de los puntos, así que quiero compartir para ayudar a otros: Los archivos con n+1 puntos al frente se incluyen directamente en el siguiente archivo anterior con n puntos al frente. Entonces, por ejemplo, elija uno con tres puntos, está incluido en el siguiente archivo anterior con dos puntos al frente. HTH

    – pein-consulting.de

    23/10/2016 a las 16:33

  • Más sobre esos puntos… Se llaman dependencias transitivas, un término tomado de las matemáticas para describir la relación de las cosas en una cadena metafórica: a se relaciona con b y b se relaciona con c, por lo que a se relaciona con cy así sucesivamente. Reemplazar a con su programa y relaciona con “incluye”.

    – Jonathan Komar

    29 sep 2019 a las 17:07


Si usa gcc, puede verificar un archivo específico con algo como:

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

-H pide al preprocesador que imprima todos los archivos incluidos recursivamente. head -n1 toma solo la primera línea de salida de eso, para ignorar cualquier archivo incluido por el encabezado nombrado (aunque stdbool.h en particular probablemente no lo haga).

En mi computadora, por ejemplo, los resultados anteriores:

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

  • Para un equivalente con Clang, invoque el compilador así (parte central de la canalización): cpp -H -fsyntax-only - 2>&1 1>/dev/null Tenga en cuenta el significado del guión stdin es su archivo fuente. Tuve que hacer las redirecciones de esa manera porque -o me estaba dando un mal rato.

    – Damián Pollet

    1 de septiembre de 2020 a las 14:03


1646752031 463 ¿Como puedo encontrar los archivos de encabezado del lenguaje de
guz

locate stdio.h

o

mlocate stdio.h

pero locate se basa en una base de datos, si nunca la ha actualizado

sudo updatedb

también puedes consultar gcc para saber cuáles son los directorios predeterminados que son escaneados por gcc sí mismo:

gcc -print-search-dirs

  • Um.. lo acabo de intentar locate pero no me da ningún resultado. Incluso después sudo locate update

    – Jack

    26 de octubre de 2012 a las 1:45

  • @Jack en mi distribución Sudo localizar actualización puede hacer esto, solo recuerdo que lo que Dietrich Epp cab es cierto, intente ese comando.

    – guz

    26 de octubre de 2012 a las 1:49

  • gcc -print-search-dirs solo imprime ubicaciones de programas y bibliotecas. No imprime la ruta de búsqueda del encabezado.

    –Kevin Cox

    12 de agosto de 2013 a las 13:13

  • en que sistema esta locate un estándar incorporado?

    – usuario3467349

    23 de junio de 2017 a las 16:05

  • @ user3467349 Está integrado en Ubuntu 16.04. Solo se ejecuta una vez al día actualizando los índices, así que lo cambié para que se actualice cada 15 minutos usando cron.

    – WinEunuuchs2Unix

    17 de junio de 2021 a las 0:05

1646752031 169 ¿Como puedo encontrar los archivos de encabezado del lenguaje de
sankar mani

Durante el preprocesamiento, todas las directivas del preprocesador se reemplazarán con las actuales. Como la expansión de macros, la eliminación de comentarios de código, incluido el código fuente del archivo de encabezado, etc.

podemos comprobarlo usando el cpp – Comando C Preprocesador.

Por ejemplo en la línea de comando:

cpp Filename.c

muestra la salida preprocesada.

Un enfoque, si conoce el nombre del archivo de inclusión, sería usar find:

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

Eso llevará un tiempo, ya que pasa por todos los directorios.

  • No estaría de más restringir el find para /usr/include y /usr/libo usar locate en lugar de.

    -Dietrich Epp

    26 de octubre de 2012 a las 1:45

1646752032 700 ¿Como puedo encontrar los archivos de encabezado del lenguaje de
Verano_Más_Más_Té

Utilizar gcc -v y puede verificar la ruta de inclusión. Por lo general, los archivos de inclusión están en /usr/include o /usr/local/include dependiendo de la instalación de la biblioteca.

  • No estaría de más restringir el find para /usr/include y /usr/libo usar locate en lugar de.

    -Dietrich Epp

    26 de octubre de 2012 a las 1:45

1646752032 943 ¿Como puedo encontrar los archivos de encabezado del lenguaje de
Xymostech

La mayoría de los encabezados estándar se almacenan en /usr/include. Parece que stdbool.h se almacena en otro lugar y depende del compilador que esté utilizando. Por ejemplo, g++ lo almacena en /usr/include/c++/4.7.2/tr1/stdbool.h mientras que clang lo almacena en /usr/lib/clang/3.1/include/stdbool.h.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad