0

多くの異なる関数を含む Fortran ライブラリに取り組んでいます。開発と保守をより簡単にするために、このライブラリをいくつかのモジュール (例: 、 、 ) と、これらの個々のモジュールをすべて使用するメイン モジュールに分割part1.f90part2.f90ましたpart3.f90mylib.f90

module mylib
  use part1
  use part2
  use part3
  implicit none
end module mylib

アイデアは、このメインモジュールを私のプログラムで使用することuse mylibです. ただし、これらのモジュールのコンパイルとリンクに問題があります。

モジュールはすべて ディレクトリ/mylib/src/に含まれており、コンパイルされているため、対応する*.oおよび*.modファイルも含まれています。次を使用して別のディレクトリでプログラムをコンパイルすると:

gfortran -I/mylib/src myprog.f90 -o myprog

コンパイラーが、指定されたディレクトリーで必要なモジュールを見つけることを期待しています。しかし残念ながら、実際にはサブモジュールに含まれている関数への未定義の参照があるというエラー メッセージが表示されます。

ここで何が間違っていますか?

ご協力ありがとうございました!

4

2 に答える 2

0

他の Web サイトからいくつかの情報を見つけました。たとえば、http: //fortranwiki.org/fortran/show/Library+distributionを参照してください。

最初のアプローチは、モジュールをコンパイルし、*.modファイルを特定のディレクトリ (例: ) に保存し、を使用してファイルを含む/usr/lib/fortranアーカイブを作成することです。次に、プログラムをコンパイルするために、フラグを追加してモジュールの場所をコンパイラに示し、コード内で a に遭遇したときにモジュールを見つけることができるようにします。最後に、フラグ を使用してプログラムをアーカイブ ライブラリにリンクし、アーカイブ ライブラリの場所を で示します。libmylib.a*.oar -r libmylib.a *.o-I/usr/lib/fortranuse mylib-lmylib-L

このアプローチの問題点は、Fortran でコンパイルされたモジュールがコンパイラに依存することです。これは、マシン上で異なるコンパイラを使用する場合、または同じコンパイラの異なるバージョンを使用する場合でも注意が必要であることを意味します。

2 つ目の方法は、ライブラリのモジュールをビルド ディレクトリに含め、プログラムと共にコンパイルすることです。

他の提案は大歓迎です!

于 2013-05-01T15:29:29.540 に答える