Oracleのpro * Cコンパイラとgnu C(__builtin_va_list、__ attribute__など)

c compilation gnu oracle oracle-pro-c
Oracleのpro * Cコンパイラとgnu C(builtin_va_list、 attribute__など)
ppcライブラリファイルをgccが使用できる.cファイルに変換するproCを使用してデータベースライブラリをコンパイルしています。 しかし、次のようなproCで多くのエラーが発生します
   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システムに)、ヘッダーファイルはこれらのシンボルを使用していないようです。 e.g. 新しい.hファイルには

typedef __builtin_va_list va_list

古い.hファイルには

typedef void* va_list

このようなことはたくさんあるので、typedefを使用してすべてを手動で修正するのは嫌です

  3  0


ベストアンサー

「$ ORACLE_HOME / precomp / admin / pcscfg.cfg」の「PARSE」パラメータを「PARTIAL」に変更します。より緩和されたC構文解析が使用されるため、Pro * Cは理解できないC構文について悩まされません。

4


このプリプロセッサディレクティブを含めることでも実現できます。 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 for SPARC上にあり、GCC 3.3.1およびGCC 3.4.2でコンパイルし、Oracle 10gを使用しています

0


タイトルとURLをコピーしました