Для сборки (то есть компиляции и компоновки) программы с использованием libpq необходимо выполнить следующие действия:
Подключите libpq-fe.h заголовочный файл:
#include
В случае невыполнения этого действия компилятор обычно выводит сообщения об ошибках, подобные следующим:
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)
Укажите компилятору путь к директории, в которую были установлены Digital Q.DataBase заголовочные файлы, передав
-I параметр
компилятору. (В некоторых случаях компилятор просматривает нужную директорию по умолчанию, поэтому данный параметр можно опустить.) Например, командная строка компиляции может иметь следующий вид:
директория
cc -c -I/usr/local/pgsql/include testprog.c
При использовании make-файлов добавьте этот параметр в
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 опция или была указана неверная директория.