开发者

Oracle's pro*C compiler and gnu C (__builtin_va_list, __attribute__, etc)

开发者 https://www.devze.com 2022-12-23 13:16 出处:网络
I\'m compiling a database library with proC which converts the .ppc library file to a .c file that gcc can use. However, I\'m getting a lot of errors in proC like the following

I'm compiling a database library with proC which converts the .ppc library file to a .c file that gcc can use. However, I'm getting a lot of errors in proC like the following

   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`

The missing symbols are from a chain of standard includes like stdio.h and stdlib.h. How do I get around this issue?

The library I'm compiling came from an old solaris system that we're now upgrading (to a new solaris 10 system) and the header files don't seem to use these symbols. e.g. the newer .h files has

typedef __builtin_va_list va_list

开发者_如何转开发while the old .h files has

typedef void* va_list

There are a lot of things like this so I'm reluctant to go and fix all of them manually with a typedef


Change PARSE param in your $ORACLE_HOME/precomp/admin/pcscfg.cfg to PARTIAL - it will use more relaxed C parsing so Pro*C don't bitch about C syntax it doesn't understand.


You can achieve it also by including this preprocessor directive. Pro*C evaluates macros and replaces them

#ifdef ORA_PROC
#define __attribute__(x) 
#endif

I'm actually at home and can't verify exactly how it is defined in our code base, I will check it and complete it but it is like the above.

Update: so the exact code we use in our project is:

#if defined(ORA_PROC) || !defined(__GNUC__)
#define __attribute__(x)
typedef unsigned long long uint64_t;
typedef          long long  int64_t;
#define INLINE
#endif

For an unknown reason the preprocessor is unable to have 64 bits types defined so I define them directly so that it works. Our project is on Solaris 9 for SPARC and we compile with GCC 3.3.1 and GCC 3.4.2 and we use Oracle 10g

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号