Я пытаюсь создать модуль, в котором подпрограмма принимает имя другой подпрограммы в качестве аргумента.Вот основная программа (main.for):
program testmod
use action_mod
call main
end program testmod
А вот пример моего модуля (action_mod.for):
module action_mod
abstract interface
subroutine sub_interface(aA, aB)
integer aA, aB
intent(in) aA
intent(out) aB
end subroutine
end interface
contains
subroutine main
procedure(sub_interface) sub2,sub1
call action(sub1)
call action(sub2)
end subroutine
subroutine action(sub)
procedure(sub_interface) sub
integer argA, argB
argA = 10
call sub(argA, argB)
write(*,*) argA," > ",argB
end subroutine
subroutine sub1(i,o)
integer i,o
o = 100
return
end subroutine sub1
subroutine sub2(i,o)
integer i,o
o = 200
return
end subroutine sub2
end module action_mod
Когда я компилирую код с помощью
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.for все работает нормально.Однако это не то, что я хочу.
Не могли бы вы помочь мне найти правильный способ создания модуля?Что не так с моим кодом?