致命的なエラー C1083

filetype ファイルを開けません: 'file': message

コンパイラで必要なファイルを見つけられないと、C1083 エラーが生成されます。 このエラーには多くの原因が考えられます。 検索パスが正しくないか、ヘッダー ファイルが見つからないか名前に誤りがある場合が最も一般的ですが、他のファイルの種類や問題によっても C1083 が発生する可能性があります。 このエラーが生成される一般的な理由のいくつかを次に示します。

指定されたファイル名が正しくない

ファイルの名前が間違っている可能性があります。 たとえば、次のように入力します。

#include <algorithm.h>

この場合、目的のファイルが見つからないことがあります。 ほとんどの C++ 標準ライブラリ ヘッダー ファイルには、.h ファイル拡張子はありません。 <algorithm> ヘッダーは、この #include ディレクティブでは見つかりません。 この問題を解決するには、この例のように、正しいファイル名が入力されていることを確認します。

#include <algorithm>

一部の C ランタイム ライブラリのヘッダーは、標準のインクルード ディレクトリのサブディレクトリにあります。 たとえば、sys/types.h を含めるには、sys サブディレクトリの名前を #include ディレクティブに含める必要があります。

#include <sys/types.h>

ファイルがインクルード検索パスに含まれていません

コンパイラが、#include ディレクティブまたは #import ディレクティブで指定された検索ルールを使用して、ファイルを見つけられません。 たとえば、ヘッダー ファイル名が次のように引用符で囲まれている場合、

#include "myincludefile.h"

これは、ソース ファイルが含まれている同じディレクトリにあるファイルを最初に検索し、次に、ビルド環境によって指定された他の場所を検索するようコンパイラに指示しています。 絶対パスが二重引用符で囲まれている場合、コンパイラはその場所だけでファイルを検索します。 二重引用符で囲まれているのが相対パスの場合は、ソース ディレクトリに対して相対的なディレクトリでファイルを検索します。

名前が山かっこで囲まれている場合、

#include <stdio.h>

コンパイラは、ビルド環境、/I コンパイラ オプション、/X コンパイラ オプション、および INCLUDE 環境変数で定義された検索パスに従います。 ファイルの検索順序などの詳細については、「#include ディレクティブ (C/C++)」および #import ディレクティブに関するページを参照してください。

インクルード ファイルがソース ディレクトリに対して相対的な別のディレクトリに存在し、インクルード ディレクティブで相対パスを使用する場合は、角かっこの代わりに二重引用符を使用する必要があります。 たとえば、ヘッダー ファイル myheader.h が headers という名前のプロジェクト ソースのサブディレクトリにある場合、この例ではファイルの検索に失敗し、C1083 が発生します。

#include <headers\myheader.h>

ただし、この例は機能します。

#include "headers\myheader.h"

相対パスは、インクルード検索パスのディレクトリと一緒に使用することもできます。 INCLUDE 環境変数または Visual Studio の Include Directories パスにディレクトリを追加する場合は、パスの一部を共にインクルード ディレクティブに追加しません。 たとえば、ヘッダーが \path\example\headers\myheader.h にあり、Visual Studio のインクルード ディレクトリ パスに \path\example\headers\ を追加したものの、#include ディレクティブがファイルを次のように参照する場合

#include <headers\myheader.h>

ファイルは見つかりません。 インクルード検索パスで指定されたディレクトリを基準にした適切なパスを使用します。 この例では、インクルード検索パスを \path\example\ に変更するか、#include ディレクティブから headers\ パス セグメントを削除できます。

サードパーティ ライブラリの問題と vcpkg

サードパーティ製のライブラリをビルドの一部として設定した際にこのエラーが表示された場合は、C++ パッケージ マネージャである vcpkg を使用してライブラリをインストール、ビルドすることを検討してください。 vcpkg では、大規模な拡大中のサード パーティのライブラリのリストがサポートされ、プロジェクトの一部として適切なビルドに必要なすべての構成プロパティと依存関係が設定されます。

ファイルはプロジェクトに含まれますが、インクルード検索パスはそうでありません。

ヘッダー ファイルがソリューション エクスプローラーの一覧にプロジェクトの一部として表示されていても、コンパイラがファイルを発見できるのは、それらのファイルがソース ファイルの #include または #import ディレクティブによって参照されていて、インクルード検索パスにある場合だけです。 ビルドの種類が異なると、使用する検索パスも異なることがあります。 /X コンパイラ オプションを使用すると、ディレクトリを、インクルード検索パスから除外できます。 このため、別々のビルドにおいて、名前は同じでも別々のディレクトリに置かれている別々のインクルード ファイルを使用することができます。 これは、プリプロセッサ コマンドを使用する条件付きコンパイルに代わる方法です。 /X コンパイラ オプションの詳細については、「/X (標準インクルード パスの無視)」を参照してください。

この問題を解決するには、インクルード ファイルまたはインポートされたファイルを検索するときにコンパイラが使用するパスを修正します。 新しいプロジェクトでは、既定のインクルード検索パスが使用されます。 場合によっては、インクルード検索パスを変更してプロジェクト用のディレクトリを追加することも必要になります。 コマンド ラインでコンパイルする場合は、INCLUDE 環境変数または /I コンパイラ オプションにパスを追加して、ファイルのパスを指定するように設定します。

Visual Studio でインクルード ディレクトリ パスを設定するには、プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 左ペインの [構成プロパティ][VC++ ディレクトリ] を選択し、次に [インクルード ディレクトリ] プロパティを編集します。 Visual Studio でコンパイラが検索するユーザー単位およびプロジェクト単位のディレクトリの詳細については、VC++ ディレクトリ プロパティ ページに関するページを参照してください。 /I コンパイラ オプションの詳細については、「/I (追加インクルード ディレクトリ)」を参照してください。

コマンド ライン INCLUDE または LIB 環境が設定されていない

コマンド ラインでコンパイラを実行するときに、環境変数を使用して、検索パスを指定することはよくあります。 INCLUDE または LIB 環境変数で設定される検索パスが正しく設定されていないと、C1083 エラーが生成される可能性があります。 開発者コマンド プロンプトのショートカットを使用して、コマンド ライン ビルドの基本環境を設定することを強くお勧めします。 詳細については、コマンドラインでの C/C++ コードのビルドに関するページを参照してください。 環境変数の使用方法の詳細については、「方法: ビルドで環境変数を使用する」を参照してください。

ファイルがロックまたは使用されている可能性がある

別のプログラムを使用してファイルを編集またはアクセスしている場合は、ファイルがロックされている可能性があります。 他のプログラムでファイルを閉じてみます。 並列コンパイル オプションを使用している場合、他のプログラムというのは Visual Studio である場合があります。 並列ビルド オプションをオフにするとエラーが解決する場合は、これが問題になります。 他の並列ビルド システムにもこの問題が発生する可能性があります。 ビルド順序が正しくなるように、ファイルとプロジェクトの依存関係を設定してください。 場合によっては、複数のプロジェクトによってビルドされる可能性がある共通ファイルのビルド依存関係の順序を強制するために、中間プロジェクトの作成を検討してください。 ウイルス対策プログラムで、最近変更されたファイルをスキャン用に一時的にロックする場合があります。 可能であれば、ウイルス対策スキャナーから、ご自身のプロジェクト ビルド ディレクトリを除外することを検討します。

ファイル名のバージョンが間違っている

C1083 エラーは、誤ったバージョンのファイルがインクルードされたことを示している場合もあります。 たとえば、ビルドに含まれているファイルのバージョンが誤っていて、そのビルド向けではないヘッダー ファイルをインクルードする #include ディレクティブが指定されていることがあります。 たとえば、特定のファイルは x86 ビルドまたはデバッグ ビルドにしか適用できない可能性があります。 そのヘッダー ファイルを見つけられない場合、コンパイラは C1083 エラーを生成します。 この問題の解決方法は、正しいファイルを使用することで、ヘッダー ファイルやディレクトリをビルドに追加することではありません。

プリコンパイル済みヘッダーがプリコンパイルされていない

プロジェクトがプリコンパイル済みヘッダーを使用するように設定されている場合、関連する .pch ファイルが作成されて、そのヘッダーの内容を使用するファイルをコンパイルできるようにする必要があります。 たとえば、新しいプロジェクトのプロジェクト ディレクトリには、pch.cpp ファイル (Visual Studio 2017 以前では stdafx.cpp) が自動的に作成されます。 そのファイルを最初にコンパイルして、プリコンパイル済みヘッダー ファイルを作成してください。 通常のビルド プロセス設計では、これは自動的に処理されます。 詳細については、プリコンパイル済みヘッダー ファイルの作成に関するページを参照してください。

その他の理由

  • SDK またはサードパーティのライブラリをインストールしたが、SDK またはライブラリのインストール後に新しい開発者コマンド プロンプト ウィンドウを開いていません。 SDK またはライブラリから INCLUDE パスにファイルを追加する場合は、新しい開発者コマンド プロンプト ウィンドウを開き、これらの環境変数の変更を取得する必要がある場合があります。

  • ファイルでマネージド コードが使用されていますが、コンパイラ オプション /clr が指定されていません。 詳細については、「/clr (共通言語ランタイムのコンパイル)」を参照してください。

  • ヘッダーをプリコンパイルしたときに使用したものとは別の /analyze コンパイラ オプション設定を使用して、ファイルがコンパイルされています。 プロジェクトのヘッダーがプリコンパイルされる場合、すべてのファイルが同じ /analyze 設定を使用する必要があります。 詳細については、「/analyze (コード分析)」を参照してください。

  • ファイルまたはディレクトリは Linux 用 Windows サブシステム によって作成され、ディレクトリごとの大文字と小文字の区別が有効になっており、パスまたはファイルの指定された大文字と小文字の区別が、ディスク上のパスまたはファイルの大文字と小文字の区別と一致しません。

  • ファイル、ディレクトリ、またはディスクが読み取り専用です。

  • Visual Studio またはコマンド ライン ツールに、ファイルまたはディレクトリを読み取る十分なアクセス許可がありません。 これは、たとえば、プロジェクト ファイルの所有権が、Visual Studio またはコマンド ライン ツールで実行されているプロセスと異なる場合に発生する可能性があります。 この問題は、管理者として Visual Studio または開発者コマンド プロンプトを実行することで修正できる場合があります。

  • ファイル ハンドルが足りません。 いくつかのアプリケーションを閉じてから、再コンパイルしてください。 この状況は、通常であればめったに発生しません。 ただし、物理メモリが限定されているコンピューターで大規模なプロジェクトをビルドすると発生することがあります。

次の例では、ヘッダー ファイル "test.h" がソース ディレクトリまたはインクルード検索パスに存在しない場合に C1083 エラーが生成されます。

// C1083.cpp
// compile with: /c
#include "test.h"   // C1083 test.h does not exist
#include "stdio.h"  // OK

IDE またはコマンド ラインで C/C++ プロジェクトをビルドする方法、および環境変数の設定に関する情報については、プロジェクトとビルド システムに関するページを参照してください。

関連項目