31.21. Создание программ с использованием libpq#
31.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)
Укажите компилятору путь к каталогу, в котором установлены заголовочные файлы Tantor BE, указав опцию
-I. (В некоторых случаях компилятор будет искать в указанном каталоге по умолчанию, поэтому вы можете опустить эту опцию). Например, ваша команда компиляции может выглядеть так:directorycc -c -I/opt/tantor/db/16/include testprog.c
Если вы используете make-файлы, то добавьте опцию в переменную
CPPFLAGS:CPPFLAGS += -I/opt/tantor/db/16/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. (Опять же, компилятор будет искать некоторые каталоги по умолчанию). Для максимальной переносимости поместите опциюdirectory-Lперед опцией-lpq. Например:cc -o testprog testprog1.o testprog2.o -L/opt/tantor/db/16/lib -lpq
Вы можете узнать каталог библиотеки, используя команду
pg_config:$pg_config --libdir/opt/tantor/db/16/libИли снова используйте
pkg-config:$pkg-config --libs libpq-L/opt/tantor/db/16/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или не указали правильный каталог.