| PostgreSQL 8.0.0 中文文件(轉譯自 PostgreSQL 中國 製作的簡體中文版本) | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 29. ecpg - 在 C 裡嵌入 SQL | Fast Forward | Next |
既然現在您已經有了如何構成嵌入的 SQL C 程序的概念, 那麼您可能就會向知道如何編譯它們。在編譯之前,您先用嵌入的 SQL C 預編譯器處理文件, 於編譯器會把您使用的 SQL 語句轉換成特殊的函數調用。 在編譯之後,您必須用一個包含所需要的函數的特殊庫來鏈接目標文件。 這些函數從參數中抓取訊息,用 libpq 接口執行 SQL 命令,然後把結果放到聲明為輸出的參數中。
預處理程序叫做 ecpg,包含在正常的 PostgreSQL 安裝裡面。嵌入的 SQL 程序通常的擴展名是 .pgc。 如果您有一個叫做 prog1.pgc 的程序文件,那麼您可以簡單地調用
ecpg prog1.pgc
來處理它。這樣將建立一個叫做 prog1.c 的文件。 如果您的輸入文件不遵循建議的命名模式,那麼您可以用 -o 選項明確地聲明輸出文件。
處理後的文件可以正常編譯,比如:
cc -c prog1.c
生成的 C 源文件包含來自 PostgreSQL 安裝的頭文件,這樣,如果您在一個預設不查找的位置安裝了 PostgreSQL, 那麼您就必須在編譯命令行上增加類似 -I/usr/local/pgsql/include 這樣的選項。
要鏈接一個嵌入的 SQL 程序,您需要包含 libecpg 庫, 像這樣:
cc -o myprog prog1.o prog2.o ... -lecpg
另外,您可能還需要增加一個類似 -L/usr/local/pgsql/lib 這樣的選項到這個命令行上。
如果您用 make 把製作過程融合到一個大的項目中, 那麼在您的 makefile 裡包含下面的隱含規則可能會比較方便:
ECPG = ecpg
%.c: %.pgc
$(ECPG) $<
ecpg 命令的複雜語法在 ecpg 裡有詳細介紹。
如果使用 configure 的 --enable-thread-safety 選項編譯了 ecpg 庫,那麼它是線程安全的。 (您可能需要使用其它線程命令行選項編譯您的客戶端代碼。)