Fortran95 为什么我在尝试将派生类型放入模块时收到损坏的模块编译消息?

Fortran95 为什么我在尝试将派生类型放入模块时收到损坏的模块编译消息?,fortran95,flang,Fortran95,Flang,我正在学习如何在Fortran 95中跨模块分发代码 我有以下代码打算使用两种派生类型: 文件解析器2.f95 program file_parser_2 use data_model_2 implicit none ! ------------------- ! VARIABLE DEFINITION ! ------------------- integer

我正在学习如何在Fortran 95中跨模块分发代码

我有以下代码打算使用两种派生类型:

文件解析器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
程序什么也不做,只是读取输入并根据这些字段进行处理。为了涵盖具体问题,故意将其精简

由于这些派生类型将在不同的模块中使用,并且可能在不同的程序中使用,因此我将它们放在一个名为
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
了。我编辑了这个问题,只保留了编译问题,剩下的问题转移到另一个问题