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.