2025年9月25日: PostgreSQL 18 釋出!
支援的版本:當前18)/ 17 / 16 / 15 / 14 / 13
開發版本:devel
不受支援的版本:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2

32.22. 構建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)
    
  • 透過向編譯器提供-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,則可以改為執行:

    $ 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選項,或者沒有指定正確的目錄。

提交更正

如果您在文件中看到任何不正確的內容、與您在使用特定功能時的體驗不符或需要進一步澄清的內容,請使用此表格報告文件問題。