views:

352

answers:

2

I'm compiling a database library with pro*C which converts the .ppc library file to a .c file that gcc can use. However, I'm getting a lot of errors in pro*C 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

+1  A: 

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.

qrdl
That did it, thanks!
Charles Ma
A: 

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

tristopia