
# ecpg预处理以及编译执行
准备嵌入式SQL-C源程序，以.pgc为后缀名，ecpg负责将其转换成可被编译器编译的C语言程序。
生成的C语言程序被gcc编译器编译为可执行文件，运行该可执行文件实现客户端程序访问数据库。示例请参见[常用示例](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0224.html#ZH-CN_TOPIC_0000002558945689)章节。
- ecpg预处理以及编译处理过程
  1. 预处理：ecpg -I $GAUSSHOME/include -o test.c test.pgc
     ecpg预处理的参数选项如下：
     ```
     ecpg [OPTION]...
     ```
     其中OPTION参数选项如下：
     - -o OUTFILE：预处理嵌入式SQL-C程序将结果写入OUTFILE，OUTFILE为C语言文件。
     
     - -I DIRECTORY：头文件的搜索路径。
     
     - -c：预处理嵌入式SQL-C程序自动生成C语言文件。
     
     - --version：查看ecpg当前版本。
     
     - -C MODE：指定预处理兼容模式，"ORA"为O兼容。
     
     - -r OPTION：指定运行时的行为。OPTION可以是：no_indicator、prepare、questionmarks或with_hold。
       - no_indicator：使用特殊值来表示空值。
       
       - prepare：在使用语句之前先prepare所有语句。
       
       - questionmarks：允许使用问号作为占位符。
       
       - with_hold：对于未指定HOLD关键字创建的游标，当指定该选项后，游标行为默认为WITH HOLD（该功能需要ecpg和内核版本一致）。
        
       
  
  2. 编译：gcc -I $GAUSSHOME/include/ecpg -I $GAUSSHOME/include -I $GAUSSHOME/include/gaussdb/server/ -L $GAUSSHOME/lib -lecpg -lrt -lpq -lpgtypes -lpthread test_ecpg.c -o test_ecpg
  
  3. 执行：./test
  
  
  ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
  - ecpg作为编译预处理工具，若在预处理或编译过程中出现找不到头文件或者函数实现的报错信息，可以根据需要指定头文件，或者链接动态库。
  
  - ecpg需要gcc、ld等编译预处理工具，建议gcc使用7.3.0版本。
  
  - 使用ecpg开发应用程序所依赖的其他动态库和头文件，常见的位于$GAUSSHOME/include/libpq, $GAUSSHOME/include。
  
  - 编译过程中常见的动态库依赖：-lpq、-lpq_ce、-lpthread。若开发过程中需要使用libpq通信库，则需要连接-lpq和-lpq_ce。若开发过程中需要使用多线程连接，则需要连接-lpthread。
    
 
