Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Where are include files stored - Ubuntu Linux, GCC

So, when we do the following:

#include <stdio.h> 

versus

#include "myFile.h" 

the compiler, GCC in my case, knows where that stdio.h (and even the object file) are located on my hard drive. It just utilizes the files with no interaction from me.

I think that on my Ubuntu Linux machine the files are stored at /usr/include/. How does the compiler know where to look for these files? Is this configurable or is this just the expected default? Where would I look for this configuration?

Since I'm asking a question on these include files, what are the source of the files? I know this might be fuzzy in the Linux community but who manages these? Who would provide and manage the same files for a Windows compiler.

I was always under the impression that they come with the compiler but that was an assumption...

like image 339
Frank V Avatar asked Aug 02 '09 01:08

Frank V


People also ask

Where does GCC look for include files?

GCC looks for headers requested with #include " file " first in the directory containing the current file, then in the directories as specified by -iquote options, then in the same places it would have looked for a header requested with angle brackets.

Where are C libs stored?

The C standard library itself is stored in '/usr/lib/libc. a' and contains functions specified in the ANSI/ISO C standard, such as 'printf' ---this library is linked by default for every C program.

Where are header files stored?

The angle brackets (<>) cause the preprocessor to search for the header file in the standard place for header files on your system, usually the /usr/include directory.


1 Answers

See here: Search Path

Summary:

#include <stdio.h> 

When the include file is in brackets the preprocessor first searches in paths specified via the -I flag. Then it searches the standard include paths (see the above link, and use the -v flag to test on your system).

#include "myFile.h" 

When the include file is in quotes the preprocessor first searches in the current directory, then paths specified by -iquote, then -I paths, then the standard paths.

-nostdinc can be used to prevent the preprocessor from searching the standard paths at all.

Environment variables can also be used to add search paths.

When compiling if you use the -v flag you can see the search paths used.

like image 152
Karl Voigtland Avatar answered Sep 22 '22 07:09

Karl Voigtland