IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

32.20. 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
         

    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 -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
         

    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.