Fortran95 为什么我在尝试将派生类型放入模块时收到损坏的模块编译消息?
我正在学习如何在Fortran 95中跨模块分发代码 我有以下代码打算使用两种派生类型: 文件解析器2.f95Fortran95 为什么我在尝试将派生类型放入模块时收到损坏的模块编译消息?,fortran95,flang,Fortran95,Flang,我正在学习如何在Fortran 95中跨模块分发代码 我有以下代码打算使用两种派生类型: 文件解析器2.f95 program file_parser_2 use data_model_2 implicit none ! ------------------- ! VARIABLE DEFINITION ! ------------------- integer
program file_parser_2
use data_model_2
implicit none
! -------------------
! VARIABLE DEFINITION
! -------------------
integer :: i, io_result
integer :: lines_read
type(type1_record) :: line_read
type(timestamp_record) :: timestamp_read
! -------------------
! READ RECORDS
! -------------------
lines_read = 0
do
! READ LINE TO line_read IF AVAILABLE
read(*,*,iostat=io_result) line_read
if (io_result /= 0) exit
! PARSE TIMESTAMP
timestamp_read%year = line_read%year
timestamp_read%month = line_read%month
timestamp_read%day = line_read%day
timestamp_read%hour = line_read%hour
timestamp_read%minute = line_read%minute
timestamp_read%second = line_read%second
! DO OTHER STUFF
! TBC
end do
end program
module data_model_2
! -------------------
! TYPE DEFINITION
! -------------------
type :: type1_record
integer :: month
integer :: day
integer :: year
integer :: hour
integer :: minute
integer :: second
integer :: value1
integer :: value2
end type
type :: timestamp_record
integer :: year
integer :: month
integer :: day
integer :: hour
integer :: minute
integer :: second
end type
end module
程序什么也不做,只是读取输入并根据这些字段进行处理。为了涵盖具体问题,故意将其精简
由于这些派生类型将在不同的模块中使用,并且可能在不同的程序中使用,因此我将它们放在一个名为data\u model
的单独模块中
数据模型2.f95
program file_parser_2
use data_model_2
implicit none
! -------------------
! VARIABLE DEFINITION
! -------------------
integer :: i, io_result
integer :: lines_read
type(type1_record) :: line_read
type(timestamp_record) :: timestamp_read
! -------------------
! READ RECORDS
! -------------------
lines_read = 0
do
! READ LINE TO line_read IF AVAILABLE
read(*,*,iostat=io_result) line_read
if (io_result /= 0) exit
! PARSE TIMESTAMP
timestamp_read%year = line_read%year
timestamp_read%month = line_read%month
timestamp_read%day = line_read%day
timestamp_read%hour = line_read%hour
timestamp_read%minute = line_read%minute
timestamp_read%second = line_read%second
! DO OTHER STUFF
! TBC
end do
end program
module data_model_2
! -------------------
! TYPE DEFINITION
! -------------------
type :: type1_record
integer :: month
integer :: day
integer :: year
integer :: hour
integer :: minute
integer :: second
integer :: value1
integer :: value2
end type
type :: timestamp_record
integer :: year
integer :: month
integer :: day
integer :: hour
integer :: minute
integer :: second
end type
end module
我试图编译它们,但收到损坏的模块错误:
$ flang file_parser_2.f95
F90-F-0004-Corrupt or Old Module file ./data_model_2.mod (file_parser_2.f95: 5)
F90/x86-64 FreeBSD Flang - 1.5 2017-05-01: compilation aborted
$
为什么我会得到这个错误?< /p>你在代码< > FielyPARSer22.F95/COD>之前重新编译<代码> DATAYMODEMARY2.2.F95 < /代码>吗?请尽量避免在同一个问题中询问那些附加的部分(关于<代码>包含和<代码>隐无< /代码>):如果问题仅仅考虑一个方面,对其他人会更好/更有帮助。(还请注意,如果使用
contains
,您会在和下得到不同的答案,因此请确保您询问的是Fortran 90、Fortran 95还是Fortran。)我完全误解了我必须执行的过程flang-c data\u model\u 2.f95
,它同时生成data\u model\u 2.o
和data\u model\u 2.mod
,然后我就可以编译file\u parser\u 2.f95
了。我编辑了这个问题,只保留了编译问题,剩下的问题转移到另一个问题