Set WeberTrivia.com to be my default homepage.   Suggest a Question                                               

Suggest A Question : :  Frequently Asked Questions : :  Search : :  Relevant Manuals : : 
PHP Questions : :  Linux Questions : :  MySQL Questions : : 
home  [ Login ] 

27.13. Building libpq Programs

To build (i.e., compile and link) your libpq programs 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 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.

If your codes references the header file libpq-int.h and you refuse to fix your code to not use it, starting in PostgreSQL 7.2, this file will be found in includedir/postgresql/internal/libpq-int.h, so you need to add the appropriate -I option to your compiler command line.

Who's Online
Guest Users: 12
Google
Web
WeberTrivia
WeberDev
WeberForums
 Free Sample Chapters  Free Sample Chapters
  Deliver First Class Web Sites: 101 Essential Checklists
Want to learn how to make your web sites usable and accessible? Want to ensure that your sites meet current best practice, without spending hours trawling through incomprehensible specifications and recommendations from dozens of different books, research papers, and web sites? Want to make sure that the sites you build are "right the first time," requiring no costly redevelopments?

More Sample Chapters

PHP General