0

While learning Fortran, I came across modules and procedures. I wrote the following code and got into an error saying Undefined symbols for architecture arm64.

Example program: a.f90:

module debug_2
   implicit none

   interface i
      module procedure :: sub_1
      module procedure :: sub_2
   end interface i

contains

   subroutine sub_1(v)
      real, intent(in) :: v
      print *, "1"
   end subroutine sub_1

   subroutine sub_2(v)
      logical, intent(in) :: v
      print *, "2"
   end subroutine sub_2

end module debug_2

b.f90

module debug
    use debug_2
    implicit none

    interface i
        module procedure :: sub_3
    end interface

contains

    subroutine sub_3(v)
        integer, intent(in) :: v
        print *, "3"
    end subroutine sub_3

end module debug

program x
    use debug
    implicit none
    integer :: c
    logical :: b
    real :: a
    call i(a)
    call i(b)
    call i(c)
end program x

After executing the above files, I get

$ gfortran -c a.f90
$ gfortran b.f90
Undefined symbols for architecture arm64:
  "___debug_2_MOD_sub_1", referenced from:
      _MAIN__ in ccaCj35V.o
  "___debug_2_MOD_sub_2", referenced from:
      _MAIN__ in ccaCj35V.o
ld: symbol(s) not found for architecture arm64
collect2: error: ld returned 1 exit status

What am I doing wrong here?

0 Answers0