Oracle的pro*C编译器和gnu C(__builtin_va_list、__attribute__等)

9rygscc1  于 2023-05-06  发布在  Oracle
关注(0)|答案(2)|浏览(178)

我正在用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系统,我们现在正在升级(到一个新的solaris10系统),头文件似乎没有使用这些符号。例如,较新的.h文件具有

typedef __builtin_va_list va_list

而旧的.h文件

typedef void* va_list

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

qmb5sa22

qmb5sa221#

$ORACLE_HOME/precomp/admin/pcscfg.cfg中的PARSE参数更改为PARTIAL-它将使用更宽松的C解析,因此Pro*C不会抱怨它不理解的C语法。

osh3o9ms

osh3o9ms2#

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

相关问题