Oracle 's Pro*C 컴파일러 및 gnu C (__builtin_va_list, __attribute__ 등)
-
20-09-2019 - |
문제
Pro로 데이터베이스 라이브러리를 컴파일하고 있습니다.ppc 라이브러리 파일을 GCC가 사용할 수있는 .c 파일로 변환하는 c. 그러나 나는 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 10 시스템으로 업그레이드하는 오래된 Solaris 시스템에서 나 왔으며 헤더 파일은 이러한 기호를 사용하지 않는 것 같습니다. 예를 들어 최신 .H 파일은 있습니다
typedef __builtin_va_list va_list
기존 .H 파일은 있습니다
typedef void* va_list
이와 같은 많은 것들이 있으므로 나는 타입을 사용하여 모두 수동으로 고치기를 꺼려합니다.
해결책
변화 PARSE
당신의 파라 $ORACLE_HOME/precomp/admin/pcscfg.cfg
에게 PARTIAL
- 더 편안한 C 파싱을 사용하므로 Pro*C는 이해하지 못하는 C 구문에 대해 암시하지 않습니다.
다른 팁
이 사전 처리기 지침을 포함시킴으로써이를 달성 할 수 있습니다. 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 비트 유형을 정의 할 수 없으므로 작동하도록 직접 정의합니다. 우리의 프로젝트는 SPARC 용 Solaris 9에 있으며 GCC 3.3.1 및 GCC 3.4.2로 컴파일하며 Oracle 10G를 사용합니다.