Проблема компиляции на Fortran 90: неопределенная ссылка на <modulename> - PullRequest
9 голосов
/ 11 октября 2010

У меня проблемы с попыткой скомпилировать простую программу на фортране, которая использует модуль в той же директории. У меня есть 2 файла: test1.f90, который содержит программу, и modtest.f90, который содержит модуль.

Это test1.f90:

program test
  use modtest
  implicit none
  print*,a
end program test

Это modtest.f90:

module modtest
  implicit none
  save
  integer :: a = 1
end module modtest

Оба файла находятся в одном каталоге. Я компилирую modtest.f90 и test.f90 так:

gfortran -c modtest.f90
gfortran -o test1 test1.f90

Но тогда я получаю эту ошибку:

/tmp/cckqu8c3.o: In function `MAIN__':
test1.f90:(.text+0x50): undefined reference to `__modtest_MOD_a'
collect2: ld returned 1 exit status

Есть ли что-то, что я пропускаю? Спасибо за помощь

1 Ответ

11 голосов
/ 11 октября 2010

То, что вы делаете, не говорит компоновщику, где находится справочный модуль modtest, чтобы ваш код мог использовать его содержимое.

Это должно работать:

gfortran -o test1 test1.f90 modtest.o

Некоторый контекст:

Опция -o указывает компилятору поместить выходные данные полной сборки (compile + link) впрограмма под названием test1.Затем мы предоставляем файл для компиляции (test1.f90).Наконец, мы говорим компилятору рассмотреть файл, который содержит скомпилированный вывод другой сборки (modtest.o) и связать его с скомпилированным выводом test1.f90, и использовать содержимое modtest.o при попытке отсортировать ссылкивнутри test1.f90, который ссылается на модуль modtest (в выражении use modtest в исходном коде).

Итак, в заявлении говорится:

Пожалуйста, скомпилируйте и затем ссылку test1.f90на modtest.o и создайте файл с именем test1 в качестве окончательного результата.

...