甲骨文';s pro*C编译器和gnu C(\uuuuu内置\u va\u列表、属性等)

甲骨文';s pro*C编译器和gnu C(\uuuuu内置\u va\u列表、属性等),c,oracle,compilation,gnu,oracle-pro-c,C,Oracle,Compilation,Gnu,Oracle Pro C,我正在用proC编译一个数据库库,它将.ppc库文件转换为gcc可以使用的.c文件。然而,我在proC中遇到了很多错误,如下所示 PCC-S-02201, Encountered the symbol "__ attribute__ " when expecting one of the `following` ... , Encountered the symbol "__builtin_va_list" when expecting one of the `followin

我正在用proC编译一个数据库库,它将.ppc库文件转换为gcc可以使用的.c文件。然而,我在proC中遇到了很多错误,如下所示

   PCC-S-02201, Encountered the symbol
"__ attribute__ " when expecting one of
the `following`

... 

   , Encountered the symbol
"__builtin_va_list" when expecting one of
the `following`
缺少的符号来自一系列标准,如stdio.h和stdlib.h。我如何回避这个问题

我正在编译的库来自一个旧的solaris系统,我们现在正在升级(到一个新的solaris 10系统),并且头文件似乎没有使用这些符号。e、 g.较新的.h文件

typedef __builtin_va_list va_list
typedef void* va_list
而旧的.h文件

typedef __builtin_va_list va_list
typedef void* va_list

有很多类似的事情,所以我不愿意去手动修复它们,在你的
$ORACLE\u HOME/precomp/admin/pcscfg.cfg中使用typedef更改
PARSE
参数来修改
PARSE
PARTIAL
-它将使用更宽松的C解析,这样Pro*C就不会抱怨它不懂的C语法了。

你可以实现它也包括这个预处理器指令。Pro*C计算宏并替换它们

#ifdef ORA_PROC
#define __attribute__(x) 
#endif
我实际上在家里,不能确切地验证它在我们的代码库中是如何定义的,我将检查它并完成它,但它与上面一样

更新:所以我们在项目中使用的确切代码是:

#if defined(ORA_PROC) || !defined(__GNUC__)
#define __attribute__(x)
typedef unsigned long long uint64_t;
typedef          long long  int64_t;
#define INLINE
#endif
由于未知的原因,预处理器无法定义64位类型,因此我直接定义它们,使其工作。
我们的项目是在Solaris 9 for SPARC上进行的,我们使用GCC 3.3.1和GCC 3.4.2进行编译,我们使用Oracle 10g

您是否尝试在pro*C中编译GCC中的库头,或者反之亦然?