この記事では、Visual C++ コンパイラまたは Visual C++ リンカーのトラブルシューティングの解決策について説明します。
適用対象: Microsoft Visual C++ 2010 Express、Visual Studio
元の KB 番号: 974229
アクション
Microsoft Visual C++ コンパイラまたはリンカーで考えられる問題を調査するときは、ビルド プロセスと使用されているオプションに関するできるだけ多くの情報を取得することが重要です。 この記事では、ビルドの問題を解決したり、Microsoft サポートの包括的な情報を取得したりするのに役立つトラブルシューティングのヒントについて説明します。
解決方法
コンパイラの問題
コンパイラの内部エラー (C1001)、ハング、クラッシュなどのコンパイラの問題の場合は、再現可能な問題のサンプルを簡略化するために、C/C++ プリプロセッサの出力をキャプチャすると便利です。 Visual C++ IDE でこれを行うには、 Generate 前処理済みファイル プロパティを 行番号 (/P) または 行番号なし (/EP/P)に設定します。 このプロパティは、[構成プロパティ]、[C/C++]、[プリプロセッサの設定] の下のプロジェクト プロパティ ページにあります。
この設定は、[プロジェクト]、[プロパティ]メニューからプロジェクト レベルで設定できます。この場合、プロジェクト内のすべてのソース ファイルの
.i
ファイルが生成されます。または、ソリューション エクスプローラーでファイルを右クリックし、[プロパティ] コンテキスト メニューを選択して単一ファイルのプロパティ ダイアログを表示することで、1 つのファイルに対して設定できます。/P コンパイラ スイッチは、プリプロセッサ出力をファイルにキャプチャするようにCL.EXEに指示します。 /EP を追加すると、結果のファイルに行番号情報が追加されなくなります。 /P で十分ですが、/EP /P では出力ファイルが小さくなります。 生成されたプリプロセッサ出力ファイルは、コンパイルされるソース ファイルと同じ名前になりますが、たとえば、file1.cppは同じディレクトリに file1.i プリプロセッサ出力ファイルを生成します。
Note
このスイッチを使用する場合、コンパイルはプリプロセッサ フェーズを過ぎても続行されます。つまり、コンパイラによって
.OBJ
ファイルが生成されないので、OBJ ファイルが見つからないという事実を反映したリンク エラーが発生する可能性があります。プリプロセッサ出力ファイルは、Visual Studio プロジェクトのコンテキストの外部で単独でコンパイルできます。
.i
ファイルには、その特定の.C
または.CPP
ソース ファイルのコンパイルに必要なすべてのヘッダー ファイル コード、マクロ置換、および前処理されたコンパイラ ディレクティブ情報が含まれています。 言い換えると、他のファイルに依存することなくコンパイルの問題を再現できる自己完結型モジュールです。 多くの場合、結果のファイルは大きくなり、大量の空白が含まれます。リンクの問題
リンカーの問題 (LNKxxxx 型エラー) の場合は、/LINKREPRO リンカー コマンド ライン スイッチを使用して、ソース ファイルに依存せずにリンカー入力のみを含むテスト ケースを生成できます。 /LINKREPRO は次の構文を使用します。
/LINKREPRO:<path>
'<path>'
は、ローカル ファイル システム上の空のフォルダーへの完全なパスです。 このフォルダーは既に存在している必要があります。リンカーによって自動的に作成されず、フォルダーが存在しない場合はエラーが生成されます。このオプションは、プロジェクト システムでは直接公開されません。 ビルドに追加するには、Project メニューからプロジェクト Properties メニューを開きます。 構成プロパティ、Linker、コマンド ラインで、追加オプション編集ボックスに、
/LINKREPRO:<path>
スイッチ (スラッシュを含む) を入力し、パスを既存のローカル フォルダー パスに置き換えます。 (例:/LINKREPRO:C:\TEMP\LINKREPRO\
)。この編集ボックスに既に他のリンカー オプションがある場合は、コンマで区切ります。
または、
LINK_REPRO
環境変数を使用することもできます。LINK_REPRO
環境変数が存在する場合、リンカーは環境変数から出力パスを読み取り、linkrepro を生成します。LINK_REPRO
環境変数を使用する場合、/LINKREPRO スイッチは必要ありません。LINK_REPRO
環境変数を使用するには:Visual Studio コマンド プロンプトを開きます。 これは、 Start メニューの Visual Studio フォルダーの Visual Studio Tools サブフォルダーにインストールされます。
既存の空のディレクトリを指す
LINK_REPRO
環境変数を作成します (例:SET LINK_REPRO=C:\TEMP\LINKREPRO\
)。同じコマンド プロンプトから Visual Studio を実行して、変更した環境のコピーを共有します。
プロジェクトを開き、[すべてのプロジェクトをリビルド] を実行します。
ビルドでLINK.EXEが呼び出されると、プロジェクトをリンクするために必要なすべてのものが linkrepro ディレクトリにコピーされます。 コピーされたファイルの中には、オブジェクト ファイル (。OBJ)、必要なライブラリ ファイル (。LIB)、Microsoft ライブラリ、リンカー応答ファイル (LINK など)。RSP) を使用して、LINK がソリューション ファイルに依存しなくなります。
リンクの問題を再現するために必要なすべてのファイルがあることを確認するには、linkrepro:
LINK @link.rsp
によって生成されたリンカー応答ファイルを使用して、LINK_REPRO環境変数で指定されたディレクトリで LINK を実行します。これを行う前に、コマンド ライン環境変数
SET LINK_REPRO=
を使用している場合は、次のコマンドを使用してこの機能をオフにします。このプロセスを使用して、LIB.EXEまたは LINK /LIB を使用するときに、ライブラリの作成に関連するファイルを確認することもできます。
免責情報
迅速な発行に関する免責事項
迅速な発行に関する記事では、Microsoft サポート組織内から直接情報を提供します。 本明細書に含まれる情報は、新たなまたはユニークなトピックに応答して作成されるか、または他のサポート情報情報を補足することを意図している。
免責事項
Microsoft および/またはそのサプライヤーは、この Web サイトに掲載されているドキュメントおよび関連するグラフィックス ("素材") に含まれる情報の適合性、信頼性、正確性について、いかなる目的でも表明または保証しません。 資料には技術的な不正確さまたは誤字が含まれる場合があり、予告なしにいつでも改訂される可能性があります。
適用される法律によって許容される最大限の範囲で、Microsoft および/またはそのサプライヤーは、明示、黙示、または法定にかかわらず、すべての表明、保証、条件を否認し、除外します。これには、タイトルの表現、保証、条件、非侵害、満足のいく条件または品質、商品性および特定の目的への適合性が含まれますが、これらに限定されません。