Связывание модуля фортрана :«неопределенная ссылка»

Я пытаюсь написать некоторые функции/подпрограммы в модуле, которые вызывают другую функцию в том же модуле и сталкиваются с ошибками компоновщика. Игрушечный пример с таким же поведением:

!in test.f

module m1
  implicit none
contains
  real function mult(a, b)
    real :: a
    real :: b
    mult = a * b
    return
  end function mult

  real function sq(a)
    real :: a, mult
    sq = mult(a, a)
    return
  end function sq

end module m1

program main
use m1
write(*,*) sq(2.0)
end program

Когда я пытаюсь скомпилировать это, у меня возникают проблемы:

[christopher@archlinux metropolis]$ gfortran -ffree-form test.f
/tmp/ccpzdTLE.o: In function `__m1_MOD_sq':
test.f:(.text+0x20): undefined reference to `mult_'
collect2: error: ld returned 1 exit status

С другой стороны, компиляция только(gfortran -c -ffree-form test.f -Wall)едет без нареканий.

Теперь это выглядит для всего мира как ошибка компилятора ---в модуле, в котором появляется ссылка на mult_, когда на самом деле должно быть__m1_MOD_sq---но мне очень трудно поверить, что это ошибка компилятора, а не то, что я делаю что-то глупое.

DDG не нашел ничего полезного. Большинство подобных проблем возникало при отделении модуля от одного основного файла. В этих случаях все работало, когда модуль находился в том же файле, что и program, а здесь это не так. Я просмотрел несколько страниц о модулях на Фортране и не нашел ничего подходящего.

Может ли кто-нибудь указать мне соответствующую документацию или, что еще лучше, объяснить, что происходит и как я могу это исправить?

5
задан Christopher White 16 July 2012 в 21:32
поделиться