32.21. Сборка программ с libpq #

Чтобы собрать (то есть, скомпилировать и скомпоновать) программу, использующую libpq, вы должны проделать следующие действия:

  • Включите заголовочный файл libpq-fe.h:

    #include <libpq-fe.h>

    Если вы не сделаете этого, обычно вас ждут примерно такие сообщения об ошибках от компилятора:

    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)
    
  • Сообщите вашему компилятору каталог, в котором установлены заголовочные файлы PostgreSQL, передав ему параметр -Iкаталог. (В некоторых случаях компилятор сам может обращаться к нужному каталогу, так что этот параметр можно опустить.) Например, ваша команда компиляции может быть такой:

    cc -c -I/usr/local/pgsql/include testprog.c

    Если вы используете скрипты сборки Makefile, добавьте этот параметр в переменную CPPFLAGS:

    CPPFLAGS += -I/usr/local/pgsql/include

    Если существует возможность, что вашу программу будут компилировать другие пользователи, то путь к каталогу не следует жёстко задавать таким образом. Вместо этого вы можете воспользоваться утилитой pg_config и узнать, где в локальной системе находятся заголовочные файлы, следующим образом:

    $ pg_config --includedir
    /usr/local/include
    

    Если у вас установлена программа pkg-config, вместо этого вы можете выполнить:

    $ pkg-config --cflags libpq
    -I/usr/local/include
    

    Заметьте, что при этом перед путём сразу будет добавлен ключ -I.

    Если требуемый параметр не будет передан компилятору, вы получите примерно такое сообщение об ошибке:

    testlibpq.c:8:22: libpq-fe.h: No such file or directory
    
  • При компоновке окончательной программы добавьте параметр -lpq, чтобы была подключена библиотека libpq, а также параметр -Lкаталог, указывающий на каталог, в котором находится libpq. (Опять же, компилятор будет просматривать определённые каталоги по умолчанию.) Для максимальной переносимости указывайте ключ -L перед параметром -lpq. Например:

    cc -o testprog testprog1.o testprog2.o -L/usr/local/pgsql/lib -lpq

    Каталог с библиотекой можно узнать, так же используя pg_config:

    $ pg_config --libdir
    /usr/local/pgsql/lib
    

    Или с помощью той же программы pkg-config:

    $ pkg-config --libs libpq
    -L/usr/local/pgsql/lib -lpq
    

    Заметьте, что и в этом случае выводится полностью сформированный параметр, а не только путь.

    В случае проблем в этой области возможны примерно такие сообщения об ошибках:

    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'
    

    Они означают, что вы забыли добавить параметр -lpq.

    /usr/bin/ld: cannot find -lpq
    

    Такая ошибка означает, что вы забыли добавить ключ -L или не указали правильный каталог.

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy