8

我不是一个非常专业的 Fortran 程序员,但现在我已经编写了许多子例程(在 Fortran 90 中),我必须将它们放在模块中(由其他子例程和程序中的“use”语句使用)以避免编写接口。我必须将这些模块与用 F77 编写的旧代码一起使用。我不希望编译器一次又一次地编译这些模块。所以我在编译这些模块后从“.o”文件创建了一个静态库:

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

但是,我仍然需要保留这些模块的“.mod”文件,以便能够在我的代码中“使用”它们。

我的问题:是否可以将这些“.mod”文件打包在静态库存档“.a”中(就像我们对 .o 文件所做的那样),以便将所有内容都封装在单个文件静态库中?

PS:我的意思是在我的系统中的任何地方,它们都使用 gfortran 64 位。

4

3 回答 3

13

不,这是不可能的。

与 C/C++ 类似,.mod文件就像头文件。它描述了模块的内容,USE <module>#include <header>.

这些 mod 文件是编译器(甚至通常是版本)特定的,并且是必需的,因为模块名称会破坏函数,因此需要一个查找表来查找结果函数名称。

于 2013-01-07T05:40:36.783 回答
3

您只需将它们复制.mod files到您的fortran finclude directory.

例如,我正在使用ubuntuwith gcc -4.4.3。我所做的是我已将库复制librandom.a/usr/local/lib并将 mod 文件复制random.mod/usr/lib/gcc/i486-linux-gnu/finclude.

现在我不必一次又一次地创建这些模组。我只需要用它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_filesmodule.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 回答