| PostgreSQL Reference Manual - Volume 2 - Programming Guide by The PostgreSQL Global Development Group Paperback (6"x9"), 408 pages ISBN 0954612035 RRP £19.95 ($34.95) Sales of this book support the PostgreSQL project! Get a printed copy>>> |
1.18 Building libpq Programs
To build (i.e., compile and link) a program using libpq you need to do all of the following things:
-
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 tofoo.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
-Idirectoryoption 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 theCPPFLAGSvariable: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 utilitypg_configto 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 astestlibpq.c:8:22: libpq-fe.h: No such file or directory
-
When linking the final program, specify the option
-lpqso that the libpq library gets pulled in, as well as the option-Ldirectoryto 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-Loption before the-lpqoption. For example:cc -o testprog testprog1.o testprog2.o -L/usr/local/pgsql/ lib -lpq
You can find out the library directory usingpg_configas 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-Loption or did not specify the right directory.
| ISBN 0954612035 | PostgreSQL Reference Manual - Volume 2 - Programming Guide | See the print edition |