2011-06-06 85 views
1

我尝试使用两个外部的Fortran模块,它们具有相同的名称(在本例中为mod_param)。所以,当我尝试编译我的代码,编译器提供了以下错误,在Fortran中使用外部模块

mod_param.o:在功能mod_param._': mod_param.f90:(.text+0x0): multiple definition of mod_param._” mod_param.o:mod_param.F90 :(文字+为0x0):第一这里定义

有没有办法解决它,而无需重命名模块文件及其名称之一?我不喜欢重命名,因为外部模块由其他人维护,我不想和他们一起玩。是否有任何特殊用途声明来做到这一点?

+0

我也一样的问题。在Rook和Wallyk的回答之后,我想一个好的解决方案就是为程序的模块名称添加前缀或后缀(例如myprogram_mod_param)。 – alexis 2015-04-15 15:54:06

回答

2

不需要。在至少一个模块中,必须更改源代码中的函数名称。

由于代码正在被其他人维护,因此考虑自动执行重命名:可能项目Makefile可以运行sed脚本,该脚本会更改函数名称。为了确保依赖关系清晰,请务必使sed脚本的输出成为一个新文件名,该文件名用于编译—处女模块将具有未编译或链接到项目中的文件名。

即使它在某种程度上可以用相同的名称连接它们,你将如何控制与名称一起被调用?

2

根据F2003标准模块名称是全局实体,并且在程序中必须是唯一的,并且对于内在模块有一定的扩展性。

所以,这将是一个没有(再说了,你会怎么告诉他们,除了他们都是同一个名字的?)