Para construir (ou seja, compilar e ligar) um programa que utiliza a libpq, é necessário realizar as seguintes atividades:
Incluir o arquivo de cabeçalho libpq-fe.h:
#include <libpq-fe.h>
Quando isto não é feito, normalmente são recebidas mensagens de erro do compilador semelhantes a:
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)
Adicionar o diretório onde os arquivos de cabeçalho do PostgreSQL estão armazenados à lista de diretórios procurados, fornecendo a opção -Idiretório para o compilador (Em alguns casos o compilador procura o diretório em questão por padrão, podendo-se omitir esta opção). Por exemplo, a linha de comando do compilador pode se parecer com:
cc -c -I/usr/local/pgsql/include testprog.c
Se estiver sendo utilizado o arquivo Makefile, então a opção deve ser adicionada à variável CPPFLAGS:
CPPFLAGS += -I/usr/local/pgsql/include
Havendo possibilidade do programa ser compilado por outros usuários, então o local do diretório não deve ser fixado desta maneira. Em vez disso, pode ser executado o utilitário pg_config para descobrir onde estão os arquivos de cabeçalho no sistema local:
$ pg_config --includedir /usr/local/include
A falta da especificação correta desta opção para o compilador resulta em uma mensagem de erro do tipo:
testlibpq.c:8:22: libpq-fe.h: Arquivo ou diretório não encontrado
Ao se ligar o programa final, deve ser especificada a opção -lpq para que a biblioteca libpq seja procurada na ligação, assim como a opção -Ldiretório para adicionar o diretório onde a biblioteca libpq reside à lista de diretórios a serem procurados por -l (Novamente, o compilador procura em alguns diretórios por padrão). Para o máximo de portabilidade, a opção -L deve ser colocada antes da opção -lpq. Por exemplo:
cc -o testprog testprog1.o testprog2.o -L/usr/local/pgsql/lib -lpq
O diretório da biblioteca pode ser descoberto utilizando pg_config também:
$ pg_config --libdir /usr/local/pgsql/lib
As mensagens de erro apontando problemas nesta área se parecem com o seguinte.
testlibpq.o(.text+0xd): In function `exit_nicely': : undefined reference to `PQfinish' testlibpq.o(.text+0x5b): In function `main': : undefined reference to `PQconnectdb' testlibpq.o(.text+0x6c): In function `main': : undefined reference to `PQstatus' ...
Isto significa que -lpq foi esquecido.
/usr/bin/ld: cannot find -lpq
Isto significa que a opção -L foi esquecida, ou que não foi especificado o diretório correto.
Se o código fizer referência ao arquivo de cabeçalho libpq-int.h, e você se recusa a corrigir o código para que não faça mais, do PostgreSQL 7.2 em diante este arquivo pode ser encontrado em includedir/postgresql/internal/libpq-int.h, portanto será necessário acrescentar a opção -I apropriada à linha de comando do compilador.