Pregunta

Así, cuando hacemos lo siguiente:

#include <stdio.h>

frente a

#include "myFile.h"

el compilador GCC en mi caso, sabe donde que stdio.h (e incluso el archivo de objeto) se encuentra en mi disco duro.Simplemente utiliza los archivos con ninguna interacción de mí.

Yo creo que en mi Ubuntu Linux máquina los archivos son almacenados en /usr/include/. ¿Cómo funciona el compilador sabe dónde buscar estos archivos? Es este configurable o es sólo la espera predeterminado?Donde iba a buscar para esta configuración?

Ya que estoy haciendo una pregunta, en estos se incluyen archivos, lo que son la fuente de los archivos?Sé que esto puede ser aproximada en la comunidad Linux, pero que gestiona estos?Quién iba a proveer y administrar los mismos archivos para Windows un compilador.

Yo siempre estaba bajo la impresión de que ellos venir con el compilador, sino que era una suposición...

¿Fue útil?

Solución

Ver aquí: Ruta de búsqueda

Resumen:

#include <stdio.h>

Cuando el archivo de inclusión está entre paréntesis, el preprocesador primero busca en las rutas especificadas a través del indicador -I . Luego busca las rutas de inclusión estándar (consulte el enlace anterior y use el indicador -v para probar en su sistema).

#include "myFile.h"

Cuando el archivo de inclusión está entre comillas, el preprocesador primero busca en el directorio actual, luego las rutas especificadas por -iquote , luego las rutas -I y luego las rutas estándar.

-nostdinc se puede utilizar para evitar que el preprocesador busque las rutas estándar en absoluto.

Las variables de entorno también se pueden usar para agregar buscar rutas.

Al compilar si usa el indicador -v puede ver las rutas de búsqueda utilizadas.

Otros consejos

gcc es un rico y complejo de la "orquestación", programa que llama a muchos otros programas para realizar sus funciones.Para el propósito específico de ver de dónde #include "goo" y #include <zap> va a buscar en tu sistema, te recomiendo:

$ 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"

Esta es una manera de ver las listas de búsqueda para los archivos incluidos, incluyendo (si alguno) de los directorios en los que #include "..." se mira pero #include <...> no.Esta lista específica que les estoy mostrando que en realidad está en Mac OS X (también conocido como Darwin), pero los comandos recomiendo que te mostrará las listas de búsqueda (así como interesantes detalles de la configuración que he reemplazado con ... aquí;-) en cualquier sistema en el que gcc se ejecuta correctamente.

Karl respondió a su búsqueda de la ruta de la pregunta, pero en cuanto a la "fuente de los archivos" va, una cosa a tener en cuenta es que si se instala el libfoo paquete y quiere hacer algún desarrollo con ella (es decir, el uso de sus cabeceras), usted también tendrá que instalar libfoo-dev.La norma de cabecera de la biblioteca los archivos ya están en /usr/include, como se vio.

Tenga en cuenta que algunas de las bibliotecas, con una gran cantidad de encabezados instalará en un subdirectorio, por ejemplo, /usr/include/openssl.Para incluir uno de esos, sólo proporcione la ruta de acceso sin la /usr/include parte, por ejemplo:

#include <openssl/aes.h>

Los archivos \#include de gcc se almacenan en /usr/include. Los archivos de inclusión estándar de g ++ se almacenan en /usr/include/c++.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top