У меня проблемы с зависимостями некоторых модулей.В основном у меня есть три файла:
datatypes_module.F90
, functions_module.F90
и main.F90
datatypes_module.F90
содержит мои типы данных.
functions_module.F90
содержит некоторыефункции, которые используют типы данных из файла datatypes_module.F90
.
И main.F90
содержит основную программу, которая использует как типы данных, так и функции.
В моей голове мне нужносначала скомпилируйте типы данных, чтобы сгенерировать файл * .mod.
Я использую:
gfortran -c datatypes_module.F90
, он генерирует файл datatypes_module.mod.
Теперь, когдаЯ пытаюсь скомпилировать модуль функций с:
gfortran -c functions_module.F90
Я получаю ошибку:
Error: Symbol ‘f64’ at (1) has no IMPLICIT type
Я не понимаю эту ошибку, поскольку файл * .mod находится в том же каталоге, что ифайл functions_module.F90.
Как мне скомпилировать код с этой архитектурой?
Спасибо
datatypes_module.F90
module datatypes_module
! Default FORTRAN intrinsic variables.
use, intrinsic :: iso_fortran_env
! Quarter precision integer variable.
integer, parameter :: i_08 = int8
! Half precision integer variable.
integer, parameter :: i_16 = int16
! Single precision integer variable.
! Equivalent to integer(4)
integer, parameter :: i_32 = int32
! Double precision integer variable.
! Equivalent to integer(8)
integer, parameter :: i_64 = int64
! Single precision floating point.
! Equivalent to real(4)
integer, parameter :: f_32 = real32
! Double precision floating point.
! Equivalent to real(8)
integer, parameter :: f_64 = real64
! Extended precision floating point.
! Equivalent to real(16)
integer, parameter :: f_128 = real128
end module datatypes_module
functions_module.F90:
module functions_module
use datatypes_module
implicit none
contains
real(f_64) function sum_numbers(a,b)
implicit none
real(kind=f_64) :: a
real(kind=f_64) :: b
sum_numbers = a + b
end function sum_numbers
real(f_64) function mul_numbers(a,b)
implicit none
real(kind=f_64) :: a
real(kind=f_64) :: b
mul_numbers = a + b
end function mul_numbers
end module functions_module
main.F90
program main
use datatypes_module
use functions_module, only : mul_numbers
implicit none
integer(kind=i_08) :: a = 10
integer(kind=i_16) :: b = 10
integer(kind=i_32) :: c = 10
integer(kind=i_64) :: d = 10
real(kind=f_32) :: e = 10.0d0
real(kind=f_64) :: f = 10.0d0
real(kind=f_128) :: g = 10.0d0
real(kind=8) :: h = 10.0d0
write(*,*) a
write(*,*) b
write(*,*) c
write(*,*) d
write(*,*) e
write(*,*) f
write(*,*) h
write(*,*) g
write(*,*) mul_numbers(f,f)
end program main
++ EDIT # 01 ++ На основании комментариев пользователей, я управляюскомпилировать код выше.В конце концов, в определениях функций нельзя использовать оператор kind
.