35.20. Сборка программ с 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) 
- Сообщите вашему компилятору каталог, в котором установлены заголовочные файлы Postgres Pro, передав ему параметр - -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или не указали правильный каталог.