既然现在你已经有了如何构成嵌入的 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,那么它是线程安全的。 (你可能需要使用其它线程命令行选项编译你的客户端代码。)