PostgreSQLLa base de données la plus sophistiquée au monde.

28.16. Construire des applications avec libpq

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 -Irépertoire à 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 :

    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
    

    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 -Lrépertoire 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 -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
    

    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.

Si votre code référence le fichier d'en-tête libpq-int.h et que vous refusez de corriger votre code pour ne pas l'utiliser, à partir de PostgreSQL™ 7.2, ce fichier sera disponible dans includedir/postgresql/internal/libpq-int.h, donc vous aurez besoin d'ajouter l'option -I à votre ligne de commande pour le compilateur.