MSVC Ultimate 2012 を使用して、Windows Server 2008 R2 Standard (SP1) で作業しています。「C」プロジェクトを 64 ビット プラットフォーム用にコンパイルしようとしています (ただし、問題はターゲットに関連していないようです)。プロジェクトには *.pc ファイルが 1 つ含まれており、Pro*C/C++ プリコンパイラでプリコンパイルする必要があります。問題は、そのファイルをプリコンパイルできないことです。windows.h ヘッダー ファイルの解析中にプリコンパイルが失敗します。助けてください!!!
詳細:
1) ソース ファイル:私の my.pc ファイルは次のように始まります。
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <assert.h>
#include <sqlca.h>
#include <sqlcpr.h>
…..
注:#include <windows.h>
エラーの呼び出しには最初のもので十分です。
2) 構成ファイル:デフォルトの pcscfg.cfg ファイルは空です。プロジェクト構成ファイル my.cfg は次のようになります。
sys_include=(d:\Progra~1\Micros~2.0\VC\include,c:\Progra~2\WI3CF2~1\8.0\Include\um,c:\Progra~2\WI3CF2~1\8.0\Include\shared,$PROC11_ORACLE_HOME\PRECOMP\PUBLIc)
sqlcheck=full
parse=FULL
define=_WIN64 (or without this line)
注: d:\Progra~1\Micros~2.0\VC\include = D:\Program Files\Microsoft Visual Studio 10.0\VC\include、c:\Progra~2\WI3CF2~1\8.0\Include\um = C :\Program Files (x86)\Windows Kits\8.0\Include\um, c:\Progra~2\WI3CF2~1\8.0\Include\shared = C:\Program Files (x86)\Windows Kits\8.0\Include\共有、$PROC11_ORACLE_HOME = d:\oracle\product\11.2.0\client_2. これらのパスは、必要なすべてのヘッダー ファイルを見つけるために存在します。
3) コマンド ライン:カスタム ビルド ツールの [全般] オプションで、my.pc ファイルに次のコマンド ラインを定義しました。
$(PROC11_ORACLE_HOME)\bin\proc config=.\my.cfg iname=%(Filename).pc oname=.\%(Filename).c include="$(MSDEV_HOME)\vc\include".
注: $(MSDEV_HOME) = D:\Program Files\Microsoft Visual Studio 10.0.
4) プラットフォーム: MSVC プラットフォームは x64 に設定されていますが、Win32 でも同様の結果が得られました。
5) エラー メッセージ: my.cfg ファイルにdefine=_WIN64 が含まれている場合、プリコンパイル中にエラー メッセージが表示されます。
1> Syntax error at line 46, column 1, file d:\Progra~1\Micros~2.0\VC\include\vadefs.h:
1> Error at line 46, column 1 in file d:\Progra~1\Micros~2.0\VC\include\vadefs.h
1> typedef unsigned __int64 uintptr_t;
1> 1
1> **PCC-S-02201, Encountered the symbol "typedef" when expecting one of the following:**
1> ; , = ( [
1> The symbol ";" was substituted for "typedef" to continue.
6) エラー メッセージ: define=_WIN64 がmy.cfg ファイルに含まれていない場合、プリコンパイル中に受信されるエラー メッセージ:
1> Syntax error at line 48, column 1, file d:\Progra~1\Micros~2.0\VC\include\vadefs.h:
1> Error at line 48, column 1 in file d:\Progra~1\Micros~2.0\VC\include\vadefs.h
1> typedef _W64 unsigned int uintptr_t;
1> 1
1> **PCC-S-02201, Encountered the symbol "typedef" when expecting one of the following:**
1> ; , = ( [
7) ファイル vadefs.h: vadefs.h ヘッダー ファイルの重要な行は次のようになります。
#ifndef _UINTPTR_T_DEFINED
#ifdef _WIN64
typedef unsigned __int64 uintptr_t; (this is line no. 46)
#else
typedef _W64 unsigned int uintptr_t; (this is line no. 48)
#endif
#define _UINTPTR_T_DEFINED
#endif
問題は、標準の Microsoft ヘッダー ファイルでプリコンパイルが失敗する理由です。_WIN64 に関連するものなど、マクロに混乱がある可能性がありますか? または、構成ファイルに別のマクロを追加する必要がありますか? 私はたくさんの議論を読みましたが、進展はありません。どんなアイデアでも大歓迎です!