Fortran 对与抽象接口匹配的模块子例程的未定义引用
我试图创建一个模块,它的子例程使用另一个子例程的名称作为参数。以下是一个主程序(main.for): 下面是我的模块示例(操作模块): 我什么时候编译代码Fortran 对与抽象接口匹配的模块子例程的未定义引用,fortran,gfortran,Fortran,Gfortran,我试图创建一个模块,它的子例程使用另一个子例程的名称作为参数。以下是一个主程序(main.for): 下面是我的模块示例(操作模块): 我什么时候编译代码 gfortran -o main action_mod.for main.for 我犯了一个错误 /tmp/ccdSM11U.o: In function `__action_mod_MOD_main': action_mod.for:(.text+0x1a2): undefined reference to `sub1_' action_
gfortran -o main action_mod.for main.for
我犯了一个错误
/tmp/ccdSM11U.o: In function `__action_mod_MOD_main':
action_mod.for:(.text+0x1a2): undefined reference to `sub1_'
action_mod.for:(.text+0x1b1): undefined reference to `sub2_'
collect2: error: ld returned 1 exit status
但是当我把子程序sub1(I,o)
和sub2(I,o)
放到main中时,一切正常。然而,这不是我想要的
你能帮我找到创建模块的正确方法吗?我的代码有什么问题?您的问题与中的问题大致相同,因此请阅读此处的答案以了解更多详细信息。然而,这个案例有一些额外的复杂性,值得考虑 在子程序
main
中
procedure(sub_interface) sub2,sub1
表示存在外部过程sub2
和sub1
。模块action\u mod
的模块子例程sub1
和sub2
不是这些外部程序。就链接问题而言,这类似于声明字符(255)strtok
“隐藏”模块函数strtok
您应该从子例程中删除该语句
但您还有其他错误需要修复。模块子例程
sub1
和sub2
与抽象接口sub_接口
没有相同的接口。您需要确保sub1
和sub2
,i
和o
的伪参数的意图属性匹配,非常感谢您的帮助!你的评论解决了我的问题:)
/tmp/ccdSM11U.o: In function `__action_mod_MOD_main':
action_mod.for:(.text+0x1a2): undefined reference to `sub1_'
action_mod.for:(.text+0x1b1): undefined reference to `sub2_'
collect2: error: ld returned 1 exit status
procedure(sub_interface) sub2,sub1