Include the libpq-fe.h header file:
#include <libpq-fe.h>
If you failed to do that then you will normally get error messages
from your compiler similar to:
foo.c: In function `main':
foo.c:34: `PGconn' undeclared (first use in this function)
foo.c:35: `PGresult' undeclared (first use in this function)
foo.c:54: `CONNECTION_BAD' undeclared (first use in this function)
foo.c:68: `PGRES_COMMAND_OK' undeclared (first use in this function)
foo.c:95: `PGRES_TUPLES_OK' undeclared (first use in this function)
Point your compiler to the directory where the PostgreSQL header
files were installed, by supplying the
-Idirectory option
to your compiler. (In some cases the compiler will look into
the directory in question by default, so you can omit this
option.) For instance, your compile command line could look
like:
cc -c -I/usr/local/pgsql/include testprog.c
If you are using makefiles then add the option to the
CPPFLAGS variable:
CPPFLAGS += -I/usr/local/pgsql/include
If there is any chance that your program might be compiled by
other users then you should not hardcode the directory location
like that. Instead, you can run the utility
pg_config to find out where the header
files are on the local system:
$ pg_config --includedir
/usr/local/include
Failure to specify the correct option to the compiler will
result in an error message such as:
testlibpq.c:8:22: libpq-fe.h: No such file or directory
When linking the final program, specify the option
-lpq so that the libpq
library gets pulled in, as well as the option
-Ldirectory to point
the compiler to the directory where the
libpq library resides. (Again, the
compiler will search some directories by default.) For maximum
portability, put the -L option before the
-lpq option. For example:
cc -o testprog testprog1.o testprog2.o -L/usr/local/pgsql/lib -lpq
You can find out the library directory using
pg_config as well:
$ pg_config --libdir
/usr/local/pgsql/lib
Error messages that point to problems in this area could look like
the following:
testlibpq.o: In function `main':
testlibpq.o(.text+0x60): undefined reference to `PQsetdbLogin'
testlibpq.o(.text+0x71): undefined reference to `PQstatus'
testlibpq.o(.text+0xa4): undefined reference to `PQerrorMessage'
This means you forgot -lpq.
/usr/bin/ld: cannot find -lpq
This means you forgot the -L option or did not
specify the right directory.