PRO*C预编译报错:无法识别curses.h中的_Bool类型
解决PRO*C预编译时_Bool类型识别错误
问题根源
Oracle PRO*C预编译器默认对C99标准的支持有限,而RHEL 8系统头文件(如/usr/include/curses.h)中使用了C99引入的_Bool类型,预编译器无法识别该类型,导致语法错误。
解决方案
1. 调整配置文件启用C99支持
修改/opt/oracle/product/19c/dbhome_1/precomp/admin/pcscfg.cfg配置文件,做以下关键调整:
- 将
MODE=ANSI替换为CODE=C99,明确指定使用C99标准 - 添加
define=_Bool=unsigned char,让预编译器将_Bool映射为已支持的unsigned char类型 - 删除冗余的旧版本GCC头文件路径(如4.1.2、4.4.x系列),避免头文件加载冲突
修改后的配置示例:
sys_include=($ORACLE_HOME/precomp/public,/usr/lib/gcc/x86_64-redhat-linux/8/include/,/usr/include) ltype=short define=__x86_64__ define=_Bool=unsigned char CODE=C99 lines=yes SQLCHECK=SEMANTICS
2. 显式传递预编译参数(临时测试)
如果修改配置文件后仍有问题,可直接在预编译命令中指定参数绕过配置:
proc CODE=C99 DEFINE=_Bool=unsigned char caomenu.pc
验证
修改配置或执行带参数的预编译命令后,重新运行PRO*C预编译,检查是否仍出现PCC-S-02201错误。
内容的提问来源于stack exchange,提问作者Mahesh Babu Tatineni
相关产品推荐
相关产品推荐

