PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 12.20 » Interfaces client » libpq - Bibliothèque C » Construire des applications avec libpq

33.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 :

  • 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 -Irépertoire (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 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 -Lrépertoire 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 -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.