0

AIXにインストールgccしましたが、正常に動作します。gfortranとりわけ、ヘッダーファイル(.hC)によってアクセスされるいくつかのライブラリでそれらを使用します。まったく同じライブラリを(.modFortranの)モジュールで使用できますが、ご存知のように、それらの使用はオプションです。

use mylib
implicit none

私のFortranソースコードから、すべてが正常に機能します。問題は、コメントアウトしたくないimplicit noneので、私も保持する必要がありuse mylibます。そうしないと、たくさんの

Error: Symbol 'foo' at (1) has no IMPLICIT type

エラー。そして、ご存知のように、.modファイルはコンパイラに依存しているため、私が持っているファイルを使用することはできません。そうしないと、gfortranが吐き出します。

Fatal Error: File 'mylib.mod' opened at (1) is not a GFORTRAN module file

理論的には、gfortranを使用してすべてのライブラリを再コンパイルできますが、さまざまな理由で失敗する可能性があります(そうでない場合でも、困難な作業になります)。

したがって、モジュール.h内のヘッダーをプリコンパイルして、必要なのはインターフェイス情報だけを提供する方法があるかどうか疑問に思っています。.mod残念ながら、これに関する情報は見つかりませんでした。

4

2 に答える 2

2

CヘッダーファイルはFortranモジュールファイルを生成しません。Fortranモジュールファイルはコンパイラに依存しますが、通常、モジュールを含むFortranファイルをコンパイルするときに生成されます。これらは、ソースコードモジュールに関する情報(含まれているプロシージャや呼び出し規約など)を記録し、コンパイラがそれらのプロシージャの呼び出しに遭遇したときに使用できるようにします。これは、コンパイラがモジュールルーチンの呼び出しを自動的に明示的に行う方法です。通常、モジュール(ここではモジュール「mylib」)を含むFortranソースコードファイルをコンパイルしてから、それを使用するメインプログラムまたはプロシージャを含むファイルをコンパイルする必要があります。ライブラリをgfortranでコンパイルすると失敗する可能性が高い、または気が遠くなると思うのはなぜですか?試してみることをお勧めします。C.hファイルをモジュールにコンパイルすることはできません。Fortranライブラリの作成者が望む場合は、プロシージャを記述し、モジュールにコンパイルできるFortranインターフェイスを備えたファイルを提供できます。しかし、その手法はエラーが発生しやすくなります。これは、合意を維持する必要がある2つの項目があることを意味するためです。

ライブラリがCであり、FortranからISO Cバインディングを介して呼び出されている場合、最良の手法は、インターフェースを使用してファイルを作成することです。そのようなFortranファイルは提供されましたか?間違ったモジュールファイルはどこから来たのですか?そのファイルをgfortranでコンパイルすると、.modファイルが取得されます。実際のCソースコードとFortranインターフェイス宣言の重複は、2つの項目を維持する必要があることを意味しますが、この場合、元のソースコードはCであり、FortranインターフェイスステートメントはCルーチンをFortranコンパイラに記述しているため必要です。 Fortran。

于 2010-11-12T22:26:46.650 に答える
1

externalカスタムメイドのファイルのように、モジュールから使用する関数/サブルーチンを宣言できますmylib.fh。次に例を示します。

#mylib.fh
external my_function

Fortran コードでは、次を使用します。

implicit none
include 'mylib.fh'
于 2010-11-15T13:07:48.180 に答える