8

Fortran 90モジュールはエバネセントなクリーチャーです。私は(インテル®Visual FortranとVisual Studio 2010を使用してコンパイルする)いくつかの成功をしばらくの間、(単数の)モジュールを使用していました。それから私は別のモジュールを書いて、このエラーを受信する前に、別の関数でそれを使用しようとしました:Fortran 90モジュールの神秘的な性質

error #7002: Error in opening the compiled module file. Check INCLUDE paths. 

だから私は、問題のあるモジュールを削除しました。しかし、元のモジュールにアクセスしようとした後に同じエラーが表示されるようになりました。

どのように私はこれらの神秘的な生き物を見つけることができますか?なぜ1つのモジュールは2つではなく動作しますか?私はそれらを削除して再コンパイルする必要があると仮定しているか、コンパイラに何とかそれらを含めるように指示します。私はにコンパイルされたではなく、ソースコードのファイルの場所を知っています。

答えて

27
、その特定のプロセッサ(他の多くのFortranプロセッサが同様の特性を持っているが、詳細は異なる)について

:モジュールが正常にコンパイルされるとき

  • は、コンパイラはの.modファイルを生成する(そしておそらく.OBJファイル)には、モジュールによって提供されるエンティティに関する情報が含まれています。あなたが引用したエラーメッセージが参照しているのは、このmodファイルです。コンパイラは、他のソースをコンパイルしている間にモジュールのUSEステートメントを検出すると、このmodファイルを要求します。 (objファイルはリンクステージで使用されます)。

  • したがって、モジュールがUSEされる前に、コンパイラはしばらくしてモジュールのソースコードをコンパイルする必要があります。つまり、モジュールのソースコード(MODULE ... END MODULE)は、USE文の前にソースファイルの前に出現していなければなりません。あるいは、USE文でソースファイルの前にコンパイルされた別のファイルになければなりません。

  • Visual StudioでインテルFortranプロジェクトを使用してコンパイルする場合、ビルド環境は自動的にプロジェクト内のソースファイルの適切なコンパイル順序を整えようとします。コマンドラインからifortコマンドを使用してコンパイルする場合、プログラマはコンパイル順序を管理します。

  • 生成されたmodファイルを受け取るディレクトリは、コンパイラに与えられた最初の/ moduleコマンドラインオプションによって指定されます。 Visual Studioでは、このオプションは、[Fortran]> [出力ファイル]> [モジュールパス]プロパティを使用して設定します。デフォルトでは、Visual StudioのFortranプロジェクトにはこのプロパティが現在の設定の名前に設定されているため、modファイルはDebugまたはReleaseというプロジェクトの子ディレクトリに表示されます。/moduleコマンドラインオプションがない場合、modファイルはカレントディレクトリに表示されます。

  • /moduleコマンドラインオプション(または同等のVisual Studioプロパティ)で指定されたディレクトリは、modファイルの検索にも使用されます。さらに、/ Iコマンドラインオプション(Visual Studioでは、Fortran> General> Additional Include Directories)で指定されたディレクトリが検索されます。

それはあなたがだけにして、単一のプロジェクトを扱っている場合は、など1つのVisual Studioプロジェクトまたは複数のプロジェクトを持っているかどうか、ソースファイルの中で、あなたのモジュールを配布している方法についてのご質問から明らかではないが、通常は、すべてのFortranファイルをプロジェクトのソースファイルに追加するだけです。デフォルト設定は「機能する」必要があります。modファイルを検索する際のエラーは、次の理由によるものです。

  • 関連するモジュールのソースがプロジェクトのソースファイルの1つにありません。他のいくつかの理由で失敗したモジュールのソースの

  • コンパイル(以前のビルド順序で列挙された他のエラーがありますか?)モジュールは、特定のソースファイルに使用した後に定義されて

  • モジュール間に循環依存性があります(モジュールAはAなどを使用するモジュールBを使用します。これは言語の規則では許可されていません)。

  • ビルドオーダーの自動決定を混乱させるいくつかのソース構造(ビルドシステムの古いバージョンは、F2003形式のuseステートメントによって二重コロンと混同されました。また、USEステートメントを難読化してビルドシステムそれらを識別することができません)しかし、これらの側面はかなり不明です。 Visual Studioで複数のFortranプロジェクトで

は、彼らがプロジェクトの依存関係ツリーの前のプロジェクトでコンパイルしたMODファイルを見つけることができるように、依存プロジェクトのためのモジュール検索ディレクトリを変更する必要があるかもしれません。 Visual Studioのプロジェクト間の依存関係設定が正しい場合は、それ以降のバージョンのインテルFortranもこのアスペクトを自動的に処理します。

+4

+1非常に曖昧な質問に対する優れた詳細な答え。 – Chris

+0

優れた答えをありがとう。私は、Visual Studio環境でモジュールがどのように動作するかについて多くの洞察を提供しました。あなたのおかげで、私は今、複数のモジュールが間違いなく働いています!私は本当にあなたがその説明を書く時間を割いていただきありがとうございます。 – frostbyyte

関連する問題