现在你已经了解了如何编写嵌入式 SQL C 程序,接下来你可能想知道 如何编译它们。在编译之前,你要先让文件通过嵌入式 SQL C(C 语言嵌入式 SQL) 预处理器的处理,它会把其中使用的 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 这样的选项。
你可以使用 pg_config
或 pkg-config(包名为 libecpg)
来获取你的安装所对应的路径。
如果你使用 make 管理较大项目的构建 过程,那么在你的 makefile 中加入以下隐式规则可能会很方便:
ECPG = ecpg
%.c: %.pgc
$(ECPG) $<
ecpg 命令的完整语法在
ecpg 中有详细说明。
ecpg 库默认是线程安全的。不过, 编译你的客户端代码时可能需要使用某些线程相关的命令行选项。