0
Oracle version - 10.2.0.1.0
Pro*C/C++: Release 10.2.0.1.0
AIX version -  5.3

以下のエラーでコンパイルできません。

Syntax error at line 135, column 2, file /usr/include/standards.h:
Error at line 135, column 2 in file /usr/include/standards.h
#warning  The -qdfp option is required to process DFP code in headers.
.1
PCC-S-02014, Encountered the symbol "warning" when expecting one of the following:

   a numeric constant, newline, define, elif, else, endif,
   error, if, ifdef, ifndef, include, line, pragma, undef,
   an immediate preprocessor command, a C token,
The symbol "newline," was substituted for "warning" to continue.

Syntax error at line 382, column 3, file mydb.h:
Error at line 382, column 3 in file mydb.h
  time_t timestamp;  
..1
PCC-S-02201, Encountered the symbol "time_t" when expecting one of the following
:

   } char, const, double, enum, float, int, long, ulong_varchar,
   OCIBFileLocator OCIBlobLocator, OCIClobLocator, OCIDateTime,
   OCIExtProcContext, OCIInterval, OCIRowid, OCIDate, OCINumber,
   OCIRaw, OCIString, short, signed, sql_context, sql_cursor,
   struct, union, unsigned, utext, uvarchar, varchar, void,
   volatile, a typedef name,
The symbol "enum," was substituted for "time_t" to continue.

Error at line 0, column 0 in file my_db.pc
PCC-F-02102, Fatal error while doing C preprocessing
make: *** [libdb.a] Error 1

解決策はありますか?

pcscfg.cfg

sys_include=(/usr/include)

CODE=ANSI_C
parse=partial
sqlcheck=full
sys_include=/usr/include
sys_include=/usr/include/sys
sys_include=/usr/include/linux
include=$(ORACLE_HOME)/precomp/public
include=$(ORACLE_HOME)/precomp/include
include=$(ORACLE_HOME)/oracore/include
include=$(ORACLE_HOME)/oracore/public
include=$(ORACLE_HOME)/rdbms/include
include=$(ORACLE_HOME)/rdbms/public
include=$(ORACLE_HOME)/rdbms/demo

ltype=short
define=__64BIT__
define=_IBM_C
define=_LONG_LONG

AIX 5.2でも、まったく同じコードで問題ありません。この問題はAIX5.3で発生します。

4

2 に答える 2

1

報告された最初のエラーであるPCC-S-02014は、実際には重要なエラーです。Pro * Cプリコンパイラは、一部のCプリプロセッサディレクティブを無視しますが、無視します#warning-それを理解せず、。warningの後に持つ有効なものとは見なしません#

ORA_PROCこの段階で問題のあるヘッダーファイルが含まれるのを防ぐために、マクロを使用できます。#include前の回答で指定された場所が正しいと仮定すると、次のようにプリプロセッサから「非表示」にすることができます。

#ifndef ORA_PROC
#include <standards.h>
#endif

もちろん、そのファイルを直接含めない場合もあるため、階層を調べて、ソースファイルから実際に除外する必要のあるファイルを確認する必要がある場合があります。mydb.hあなたの場合、ファイル内に隠れている可能性があるように見えmy_db.pcますが、それは過度に思えます。standard.hファイル内に隠す方がよい場合がありmydb.hます。基本的に、可能な限り最小限のコードを除外します。エラーメッセージから推測していますが、レイヤーがもっとあるかもしれません。

これについては、Pro * C /C++ドキュメントの高度なトピックのセクションで説明されています。

これは、システムヘッダーファイルをコピーして編集するよりも簡単で、元のファイルを編集するよりもはるかに安全です。もちろん、何が起こっているのかを説明するコメントを追加することもできます。

于 2012-07-29T17:50:32.800 に答える
0

この問題は通常、AIX5.3以降で発生します。/usr/include/standards.hは古いバージョンとは異なり、PCCはどういうわけかコンパイルできないと思います。

この問題を修正するには、standards.hで以下を変更する必要があります。

FROM
---

#if defined(__IBM_PP_WARNING)
#warning  The -qdfp option is required to process DFP code in headers.
#else
#error  The -qdfp option is required to process DFP code in headers.

TO
--

//#if defined(__IBM_PP_WARNING)
//#warning  The -qdfp option is required to process DFP code in headers.
//#else
#if !defined(__IBM_PP_WARNING)
#error  The -qdfp option is required to process DFP code in headers.

システムインクルードファイルは変更しないことをお勧めします。したがって、standards.hファイルをプロジェクトディレクトリにコピーし、修正して使用します。

于 2012-07-27T06:50:28.117 に答える