Oracle的pro * C编译器和gnu C(__ builtin_va_list,__ attribute__等)

时间:2010-03-18 02:19:58

标签: c oracle compilation gnu oracle-pro-c

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

   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系统),并且头文件似乎不使用这些符号。例如较新的.h文件有

typedef __builtin_va_list va_list

而旧的.h文件有

typedef void* va_list

有很多这样的事情,所以我不愿意用typedef手动修复所有这些

2 个答案:

答案 0 :(得分:4)

PARSE中的$ORACLE_HOME/precomp/admin/pcscfg.cfg param更改为PARTIAL - 它将使用更宽松的C语法分析,因此Pro * C不会对它不理解的C语法感到厌恶。

答案 1 :(得分:0)

您也可以通过包含此预处理器指令来实现它。 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