Hello, comp.lang.c.
In the GCC manual, section 3.16 "Options for Directory Search" partially describes where, how, and in what order GCC finds #include files when compiling.
It's the "partially" bit which is getting on my nerves. The manual
section contains a priority list for finding #include files, but the
fifth item just vaguely states:
5. Standard system directories are scanned.
. Which directories are these? Where is this documented?
On 2025-02-05, Alan Mackenzie wrote:
In the GCC manual, section 3.16 "Options for Directory Search" partially
describes where, how, and in what order GCC finds #include files when
compiling.
It's the "partially" bit which is getting on my nerves. The manual
section contains a priority list for finding #include files, but the
fifth item just vaguely states:
5. Standard system directories are scanned.
. Which directories are these? Where is this documented?
It is, as I recall, defined at compile time of gcc. You can get your system-specific "standard system directories" by running the command:
echo | gcc -xc -E -v -
It'll print out a bunch of stuff, starting off with the compile-time
options that were used when compiling gcc itself. The bit you're
looking for being listed out under the heading:
#include <...> search starts here:
HTH
----
|_|O|_|
|_|_|O| Github: https://github.com/dpurgert
|O|O|O| PGP: DDAB 23FB 19FA 7D85 1CC1 E067 6D65 70E5 4CE7 2860
Hello, comp.lang.c.
In the GCC manual, section 3.16 "Options for Directory Search" partially describes where, how, and in what order GCC finds #include files when compiling.
It's the "partially" bit which is getting on my nerves. The manual
section contains a priority list for finding #include files, but the
fifth item just vaguely states:
5. Standard system directories are scanned.
. Which directories are these? Where is this documented?
On 2025-02-05, Alan Mackenzie <acm@muc.de> wrote:
Hello, comp.lang.c.
In the GCC manual, section 3.16 "Options for Directory Search"
partially describes where, how, and in what order GCC finds
#include files when compiling.
It's the "partially" bit which is getting on my nerves. The manual
section contains a priority list for finding #include files, but the
fifth item just vaguely states:
5. Standard system directories are scanned.
. Which directories are these? Where is this documented?
All that stuff depends on the GCC installation, and therefore cannot
be specified in concrete terms in a general document.
Unfortunately
gcc -print-search-dirs
does not have info about the include file search directories. I'm
guessing that could have to do with the split between the compiler
and preprocessor.
Anyway, we can coax the information out of the preprocessing stuff,
by adding the -v option to gcc -E.
Try this:
$ echo | gcc -xc -E -v - 2>&1 | awk '/include.*search starts
here/,/End of search list/' #include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/i686-linux-gnu/7/include
/usr/local/include
/usr/lib/gcc/i686-linux-gnu/7/include-fixed
/usr/include/i386-linux-gnu
/usr/include
End of search list.
The above happens to come from a 32 bit Ubuntu 18 VM, that I maintain
for compiling for 32 bit Intel. (You cannot install that from
scratch; 32 bit support started to be deprecated after Ubuntu 16; I
created that VM by upgrading from 16.)
Sysop: | DaiTengu |
---|---|
Location: | Appleton, WI |
Users: | 1,010 |
Nodes: | 10 (0 / 10) |
Uptime: | 31:12:11 |
Calls: | 13,187 |
Calls today: | 1 |
Files: | 186,574 |
D/L today: |
199 files (49,090K bytes) |
Messages: | 3,321,572 |