具有许多模块的静态库
问题描述:
在使用Fortran开发静态库的情况下:具有许多模块的静态库
该库由多个模块组成,例如, “模块a”,“模块b”等。
每个模块都有公共变量,类型和过程。
现在,想在程序“测试”中使用lib。
一种可能的方法是使用每个模块,并在链接期间提供* .a lib文件。例如:
program test
use a
use b
...
end program
但是,如果只需要使用/包含一个模块/ * .h会更好。例如: -
program test
use all
...
end program
一个可行的办法是将所有的公共变量,类型和程序界面复制到“模块的所有”,并使用“模块的所有”,而不是单独的模块。
但是,如果修改了单个模块中的任何一个,则“模块全部”也需要修改以符合更改。
是否有更合适的解决方法,或者是否有自动生成“模块全部”的工具?
非常感谢您的任何输入。
答
我不会将单个模块中的代码复制到模块“全部”中,因为如您所说,当代码发生更改时会导致额外的工作。错误的可能性。相反,在模块“全部”中使用这些模块。然后,当你想让他们都“使用模块全部”。当你想要一个特定的模块时使用那个模块。因为它被禁止,所以必须注意的是循环模块引用:A使用B使用C使用A不允许。
答
看来最终的解决方案是使用submodule
,这很遗憾不被gcc支持。
+1
+1,但几乎没有人支持它,afaik – 2012-04-10 19:35:46
是的,那将是最好的。我花了很长时间才意识到,如果我不使用'private',我现在使用尽可能多的,那么导入的模块符号会再次导出。 – 2012-04-10 08:57:37
谢谢你的回答。因此,需要在包含文件夹中提供所有单独的模块。所有使用的单独模块都需要使用驱动程序进行编译,这使得* .a几乎无用。是对的吗? – mianzhi 2012-04-10 12:51:28