libpq プログラムを構築 (つまり、コンパイルとリンク;ビルド) するには、以下の全てを行う必要があります。
libpq-fe.h ヘッダファイルをインクルードします。
#include <libpq-fe.h>
これを行わなかった場合、通序以下のようなエラーメッセージがコンパイラから出力されます。
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)
コンパイラに、PostgreSQL ヘッダファイルをインストールしたディレクトリを、-Idirectory を使用して、指定して下さい (コンパイラによっては可能性があるディレクトリをデフォルトで検索しますので、その場合、このオプションを省くことができます)。 例えば、以下のようなコンパイルコマンドになります。
cc -c -I/usr/local/pgsql/include testprog.c
makefile を使用している場合は、CPPFLAGS 変数にこのオプションを追加して下さい。
CPPFLAGS += -I/usr/local/pgsql/include
他のユーザによってコンパイルされるプログラムの場合は、ディレクトリの場所をハードコーディングすべきではありません。pg_config ユーティリティを実行して、ローカルなシステムにおけるヘッダファイルのインストール場所を検索することができます。
$ pg_config --includedir /usr/local/include
コンパイラに正しくオプションを付与できなかった場合、以下のようなエラーメッセージをコンパイラが出力します。
testlibpq.c:8:22: libpq-fe.h: No such file or directory
最終的なプログラムをリンクする時には、-lpq オプションを付けて、libpq を組み込んで下さい。またその際に、-Ldirectory を付けて libpq ライブラリがあるディレクトリの場所を指定して下さい (繰返しになりますが、コンパイラはデフォルトでいくつかのディレクトリを検索します)。 移植性を最大にするために、-lpq オプションの前に -L オプションを付けて下さい。たとえば、以下のようにします。
cc -o testprog testprog1.o testprog2.o -L/usr/local/pgsql/lib -lpq
同様に pg_config を使用してライブラリのディレクトリを検索することができます。
$ pg_config --libdir /usr/local/pgsql/lib
このあたりで問題があった場合のエラーメッセージは以下のようなものです。
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'
これは、-lpq を付け忘れたことを意味します。
/usr/bin/ld: cannot find -lpq
これは -L を付け忘れたか、正しいパスを指定しなかったことを意味します。
PostgreSQL 7.2 から libpq-int.h ヘッダファイルは includedir/postgresql/internal/libpq-int.hにありますので、自作のコードにて libpq-int.h ヘッダファイルを参照する場合や、このファイルを使用しないように変更することを避けた場合、適切な -I オプションをコンパイラのコマンドラインに付与する必要があります。