🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 33.10\. 处理嵌入的SQL程序 现在你已知道如何形成嵌入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` 到该命令行的选项。 你可以使用`pg_config` 或者`pkg-config`以及包名`libecpg`以 获得安装目录。 如果你使用make管理大对象编译过程, 它可能方便地包含下面你的makefiles中的隐式规则: ``` ECPG = ecpg %.c: %.pgc $(ECPG) $< ``` `ecpg`命令完整语法在[ecpg](#calibre_link-62)中有详细描述。 ecpg库缺省是线程安全的。然而,你可能需要 使用一些线程命令行选项来编译你的客户端代码。