Pour construire (c'est-à-dire compiler et lier) un programme utilisant libpq, vous avez besoin de faire tout ce qui suit :
Ajoutez le fichier d'en-tête libpq-fe.h :
#include <libpq-fe.h>
Si vous ne le faites pas, alors vous obtiendrez normalement des messages d'erreurs similaires à :
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)
Faites pointer votre compilateur sur le répertoire où les fichiers d'en-tête
de PostgreSQL ont été installés, en lui
fournissant l'option -I (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 y a une chance 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 lancer à la place :
$ pkg-config --cflags libpq
-I/usr/local/include
Notez que l'option -I sera déjà précisée au début du chemin.
Une erreur dans 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 faire pointer le compilateur vers le répertoire où les bibliothèques
libpq résident. (Là encore 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 liés à 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.