Pour construire (c'est-à-dire compiler et lier) un programme utilisant libpq, vous avez besoin de faire tout ce qui suit :
Incluez le fichier d'en-tête libpq-fe.h
:
#include <libpq-fe.h>
Si vous ne le faites pas, alors vous obtiendrez normalement les messages d'erreurs similaires à ceci
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)
Pointez votre compilateur sur le répertoire où les fichiers d'en-tête
de PostgreSQL ont été installés en fournissant l'option
-I
à votre
compilateur (dans certains cas, le compilateur cherchera dans le
répertoire en question par défaut, donc vous pouvez omettre cette
option). Par exemple, votre ligne de commande de compilation devrait
ressembler à ceci :
répertoire
cc -c -I/usr/local/pgsql/include testprog.c
Si vous utilisez des makefiles, alors ajoutez cette option à la variable
CPPFLAGS
:
CPPFLAGS += -I/usr/local/pgsql/include
S'il existe une chance pour que votre programme soit compilé par
d'autres utilisateurs, alors vous ne devriez pas coder en dur
l'emplacement du répertoire. À la place, vous pouvez exécuter l'outil
pg_config
pour trouver où sont placés les fichiers
d'en-tête sur le système local :
$
pg_config --includedir/usr/local/include
Si vous avez installé pkg-config
, vous pouvez lancé à la place :
$
pkg-config --cflags libpq-I/usr/local/include
Notez qu'il sera déjà inclus avec l'option -I
au début
du chemin.
Un échec sur la spécification de la bonne option au compilateur résultera en un message d'erreur tel que
testlibpq.c:8:22: libpq-fe.h: No such file or directory
Lors de l'édition des liens du programme final, spécifiez l'option
-lpq
de façon à ce que
les bibliothèques libpq soient intégrées, ainsi
que l'option -L
pour pointer le compilateur vers le répertoire où les bibliothèques
libpq résident (de nouveau, le compilateur
cherchera certains répertoires par défaut). Pour une portabilité maximale,
placez l'option répertoire
-L
avant l'option -lpq
.
Par exemple :
cc -o testprog testprog1.o testprog2.o -L/usr/local/pgsql/lib -lpq
Vous pouvez aussi récupérer le répertoire des bibliothèques en utilisant
pg_config
:
$
pg_config --libdir/usr/local/pgsql/lib
Ou utiliser de nouveau pkg-config
:
$
pkg-config --libs libpq-L/usr/local/pgsql/lib -lpq
Notez aussi que cela affiche les options complètes, pas seulement le chemin.
Les messages d'erreurs, pointant vers des problèmes de ce style, pourraient ressembler à ce qui suit.
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'
Ceci signifie que vous avez oublié -lpq
.
/usr/bin/ld: cannot find -lpq
Ceci signifie que vous avez oublié l'option -L
ou que
vous n'avez pas indiqué le bon répertoire.