3.1 Setting search paths
In the last chapter, we saw how to link to a program with functions in
the C math library 'libm.a', using the short-cut option -lm
and the header file 'math.h'.
A common problem when compiling a program using library header files is
the error:
FILE.h: No such file or directory
This occurs if a header file is not present in the standard include file
directories used by gcc
. A similar problem can occur for
libraries:
/usr/bin/ld: cannot find library
This happens if a library used for linking is not present in the
standard library directories used by gcc
.
By default, gcc
searches the following directories for header
files:
/usr/local/include/
/usr/include/
and the following directories for libraries:
/usr/local/lib/
/usr/lib/
The list of directories for header files is often referred to as the
include path, and the list of directories for libraries as the
library search path or link path.
The directories on these paths are searched in order, from first to last
in the two lists above.(7) For example, a header file found in
'/usr/local/include' takes precedence over a file with the same
name in '/usr/include'. Similarly, a library found in
'/usr/local/lib' takes precedence over a library with the same
name in '/usr/lib'.
When additional libraries are installed in other directories it is
necessary to extend the search paths, in order for the libraries to be
found. The compiler options -I
and -L
add new
directories to the beginning of the include path and library search path
respectively.