33.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)
СообÑиÑе ваÑÐµÐ¼Ñ ÐºÐ¾Ð¼Ð¿Ð¸Ð»ÑÑоÑÑ ÐºÐ°Ñалог, в коÑоÑом ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾ÑнÑе ÑÐ°Ð¹Ð»Ñ 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или не Ñказали пÑавилÑнÑй каÑалог.