8

私はFortranプログラマーの専門家ではありませんが、(Fortran 90で)多くのサブルーチンを作成したので、インターフェイスの作成を避けるために、それらをモジュール(他のサブルーチンやプログラムで "use"ステートメントで使用)に配置する必要があります。これらのモジュールは、F77で記述された古いコードで使用する必要があります。コンパイラにこれらのモジュールを何度もコンパイルさせたくありません。そこで、これらのモジュールをコンパイルした後、「。o」ファイルから静的ライブラリを作成しました。

ar rc libmymath.a module1.o module2.o module3.o

ただし、コードでこれらのモジュールを「使用」できるようにするには、これらのモジュールの「.mod」ファイルを保持する必要があります。

私の質問:これらの「.mod」ファイルを静的ライブラリアーカイブ「.a」にパックして(.oファイルで行ったように)、すべてが単一ファイルの静的ライブラリにカプセル化されるようにすることは可能ですか?

PS:私のシステム全体で意味するところはどこでも、それらはすべてgfortran64ビットを使用しています。

4

3 に答える 3

13

いいえ、できません。

C / C ++に類似して、.modファイルはヘッダーファイルのようなものです。モジュールの内容を説明し、にUSE <module>似てい#include <header>ます。

これらのmodファイルはコンパイラ(および多くの場合バージョン)固有であり、モジュールが関数の名前を変更するために必要であり、結果の関数名のルックアップテーブルが必要です。

于 2013-01-07T05:40:36.783 に答える
3

.mod filesそれらを自分のにコピーするだけfortran finclude directoryです。

例:で使用ubuntuしていgcc -4.4.3ます。私がしたことは、ライブラリlibrandom.aをにコピーし/usr/local/lib、modファイルrandom.modをにコピーしたこと/usr/lib/gcc/i486-linux-gnu/fincludeです。

今、私はそれらのmodを何度も作成する必要はありません。gfortran -o myfile myfile.f90 -lrandomプログラムをコンパイルしてライブラリにリンクするために使用する必要があります。もちろん、myfile.f90では「ランダムに使用」を使用する必要があります。

乾杯

于 2013-07-20T07:20:49.883 に答える
3

簡単な方法は、でコンパイルすることです

gfortran myprog.f90 -I/path/to/mod_files -L /path/to/lib -lmylib

ここで、module.modはディレクトリ内にあり/path/to/mod_filesます。module.oによって生成されました

gfortran -c /path/to/mod_files/module.f90

ライブラリmylib.aはによって生成されました

ar rcv /path/to/lib/mylib.a /path/to/mod_files/module.o

ただし、.modファイルを保持する必要があります。

私はこれと同じ問題を抱えていました。

私が助けてくれたことを願っています。

于 2019-02-20T19:41:47.947 に答える