如何规避Oracle Tuxedo中Pro*C预编译器处理OpenSSL代码的报错
解决Pro*C预编译器跳过OpenSSL头文件处理的方案
你之前的代码逻辑完全反向,所以无法生效:你写的#ifndef判断是宏未定义时才引入头文件,但你没有在ProC调用阶段指定预定义对应宏,ProC预编译时还是会解析OpenSSL头文件里的C99语法,自然会报错。
正确的实现步骤如下:
步骤1:调整代码包裹逻辑
只有非Pro*C预编译阶段才引入OpenSSL头文件,代码修改为:
#ifndef PROCA_PRE_COMPILE /* 仅当Pro*C预编译专属宏未定义时,才引入带C99语法的OpenSSL头文件 */ #include <openssl/ssl.h> #endif
宏名可自定义,只要和后续编译参数保持一致即可,不要和现有系统/业务宏重名。
步骤2:添加Pro*C预编译参数
调用proc命令预编译.pc源文件时,添加define=PROCA_PRE_COMPILE参数,示例命令:
proc iname=你的业务代码.pc define=PROCA_PRE_COMPILE <其他原有编译参数>
这一步的作用是让Pro*C预编译阶段识别到对应宏已定义,直接跳过包裹的OpenSSL头文件引入逻辑,不会解析内部的C99语法,也就不会触发报错。
步骤3:验证执行逻辑
- Pro*C预编译阶段:宏已定义,跳过OpenSSL相关代码段,无C99语法报错
- 后续C编译器编译阶段:宏未定义,正常引入OpenSSL头文件,不影响接口调用和功能实现
注意事项
- 如果.pc文件中还有直接用到OpenSSL类型、接口的代码片段,也需要用相同的宏包裹,避免Pro*C解析到相关C99语法
- 不要直接修改OpenSSL官方头文件,避免后续版本升级出现兼容性问题
内容的提问来源于stack exchange,提问作者GomTang
相关产品推荐
相关产品推荐

