Компилятор Oracle Pro * C и GNU C (__builtin_va_list, __attribute__ и т. Д.) - PullRequest
3 голосов
/ 18 марта 2010

Я собираю библиотеку базы данных с pro C, который преобразует файл библиотеки .ppc в файл .c, который может использовать gcc. Тем не менее, я получаю много ошибок в 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 ]

4 голосов
/ 18 марта 2010

Измените PARSE param в вашем $ORACLE_HOME/precomp/admin/pcscfg.cfg на PARTIAL - он будет использовать более простой синтаксический анализ C, поэтому Pro * C не рассуждает о синтаксисе C, который не понимает.

0 голосов
/ 18 марта 2010

Этого можно добиться также, включив эту директиву препроцессора. 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 для SPARC, и мы компилируем с GCC 3.3.1 и GCC 3.4.2, и мы используем Oracle 10g

...