要構建(即編譯和連結)一個使用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)
透過向編譯器提供-I
選項,將編譯器指向PostgreSQL標頭檔案安裝的目錄。(在某些情況下,編譯器預設會查詢相關目錄,因此您可以省略此選項。)例如,您的編譯命令列可能如下所示:目錄
cc -c -I/usr/local/pgsql/include testprog.c
如果您正在使用makefiles,請將該選項新增到CPPFLAGS
變數中。
CPPFLAGS += -I/usr/local/pgsql/include
如果您的程式有可能被其他使用者編譯,則不應硬編碼目錄位置。而是可以使用實用程式pg_config
來查詢本地系統上標頭檔案的位置。
$
pg_config --includedir/usr/local/include
$
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
選項,或者沒有指定正確的目錄。
如果您在文件中看到任何不正確的內容、與您在使用特定功能時的體驗不符或需要進一步澄清的內容,請使用此表格報告文件問題。