- publishing free software manuals
An Introduction to GCC - for the GNU compilers gcc and g++
by Brian J. Gough, foreword by Richard M. Stallman
Paperback (6"x9"), 144 pages
ISBN 0954161793
RRP £12.95 ($19.95)

"Answers common questions and provides many useful hints" --- Dr. Gerald Pfeifer (SUSE) -- Technical Editor Get a printed copy>>>

3.1.1 Search path example

The following example program uses a library that might be installed as an additional package on a system--the GNU Database Management Library (GDBM). The GDBM Library stores key-value pairs in a DBM file, a type of data file which allows values to be stored and indexed by a key (an arbitrary sequence of characters). Here is the example program ‘dbmain.c’, which creates a DBM file containing a key ‘testkey’ with the value ‘testvalue’:

#include <stdio.h>
#include <gdbm.h>

int
main (void)
{
  GDBM_FILE dbf;
  datum key = { "testkey", 7 };     /* key, length */
  datum value = { "testvalue", 9 }; /* value, length */

  printf ("Storing key-value pair... ");
  dbf = gdbm_open ("test", 0, GDBM_NEWDB, 0644, 0);
  gdbm_store (dbf, key, value, GDBM_INSERT);
  gdbm_close (dbf);
  printf ("done.\n");
  return 0;
}

The program uses the header file ‘gdbm.h’ and the library ‘libgdbm.a’. If the library has been installed in the default location of ‘/usr/local/lib’, with the header file in ‘/usr/local/include’, then the program can be compiled with the following simple command:

$ gcc -Wall dbmain.c -lgdbm

Both these directories are part of the default gcc include and link paths.

However, if GDBM has been installed in a different location, trying to compile the program will give the following error:

$ gcc -Wall dbmain.c -lgdbm    
dbmain.c:1: gdbm.h: No such file or directory

For example, if version 1.8.3 of the GDBM package is installed under the directory ‘/opt/gdbm-1.8.3’ the location of the header file would be,

/opt/gdbm-1.8.3/include/gdbm.h

which is not part of the default gcc include path. Adding the appropriate directory to the include path with the command-line option -I allows the program to be compiled, but not linked:

$ gcc -Wall -I/opt/gdbm-1.8.3/include dbmain.c -lgdbm 
/usr/bin/ld: cannot find -lgdbm
collect2: ld returned 1 exit status

The directory containing the library is still missing from the link path. It can be added to the link path using the following option:

-L/opt/gdbm-1.8.3/lib/

The following command line allows the program to be compiled and linked:

$ gcc -Wall -I/opt/gdbm-1.8.3/include 
   -L/opt/gdbm-1.8.3/lib dbmain.c -lgdbm

This produces the final executable linked to the GDBM library. Before seeing how to run this executable we will take a brief look at the environment variables that affect the -I and -L options.

Note that you should never place the absolute paths of header files in #include statements in your source code, as this will prevent the program from compiling on other systems. The -I option or the INCLUDE_PATH variable described below should always be used to set the include path for header files.

ISBN 0954161793An Introduction to GCC - for the GNU compilers gcc and g++See the print edition