2010-03-18 28 views
2

Je compile une bibliothèque de base de données avec le C pro qui convertit le fichier de bibliothèque .ppc en un fichier .c que gcc peut utiliser. Cependant, je reçois beaucoup d'erreurs dans pro C comme ce qui suitCompilateur pro * C d'Oracle et GNU C (__builtin_va_list, __attribute__, etc)

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` 

Les symboles manquants sont d'une chaîne de la norme comprend comme stdio.h et stdlib.h. Comment contourner ce problème?

La bibliothèque que je compile provient d'un ancien système Solaris que nous sommes en train de mettre à niveau (vers un nouveau système Solaris 10) et les fichiers d'en-tête ne semblent pas utiliser ces symboles. par exemple. les nouveaux fichiers .h a

typedef __builtin_va_list va_list 

tandis que les anciens fichiers .h a

typedef void* va_list 

Il y a beaucoup de choses comme ça, donc je suis réticent à aller fixer tous manuellement avec un typedef

+0

Etes-vous en train d'essayer de compiler dans les en-têtes de bibliothèque pro * C de gcc ou vice versa? –

Répondre

4

changement dans votre PARSE param $ORACLE_HOME/precomp/admin/pcscfg.cfg-PARTIAL - il utilisera l'analyse syntaxique C plus détendu si Pro * C ne salope pas sur la syntaxe C, il ne comprend pas.

+0

Ça l'a fait, merci! –

0

Vous pouvez également l'obtenir en incluant cette directive de préprocesseur. Pro * C évalue les macros et les remplace

#ifdef ORA_PROC 
#define __attribute__(x) 
#endif 

Je suis en fait à la maison et ne peut pas vérifier exactement comment il est défini dans notre base de code, je vais vérifier et complet, mais il est comme ci-dessus.

Mise à jour: si le code exact que nous utilisons dans notre projet est:

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

Pour une raison inconnue, le préprocesseur ne peut pas avoir 64 bits types définis donc je les définir directement pour que cela fonctionne. Notre projet est sur Solaris 9 pour SPARC et nous compilons avec GCC 3.3.1 et GCC 3.4.2 et nous utilisons Oracle 10g