【问题标题】:Fortran Module Version Fatal ErrorFortran 模块版本致命错误
【发布时间】:2011-04-18 01:16:27
【问题描述】:

我在 Fortran 95 上有一个非常可怕的错误:

Fatal Error: While reading module 'list5.mod' found module version 0, expected 6

我已经包含了我的模块的主要结构。我非常怀疑它与我模块中的内容有什么关系,因为它给了我关于这些的错误消息并且我已经能够修复它们,这意味着它能够很好地通过我的模块它只是一些与我使用模块的方式。也许?

    MODULE list5
    IMPLICIT NONE

    CONTAINS

----

END MODULE

主程序的结构如下:

    PROGRAM mainlist
    USE list5
IMPLICIT NONE

    !Variable Declaration
    INTEGER:: opt
    INTEGER, PARAMETER:: maxitems=50
    INTEGER:: size=0
    CHARACTER(20):: itemarray(50)
    INTEGER:: quantityarray(50)
    INTEGER:: totalquantity, i=0
    REAL:: totalprice=0, pricearray(50)=0

    CHARACTER(20), DIMENSION(:)::Item
    CHARACTER(20):: ItemSought
    LOGICAL:: Found
    INTEGER:: Location

    INTEGER:: NumItems=0, SmallestItem=0

!Select statement for the menu

DO
opt=choices()
SELECT CASE (opt)
    CASE(1)
        size=size+1
        CALL getItemData(itemarray,pricearray,quantityarray)
    CASE(2)
        CALL getFileItems(size,itemarray,pricearray,quantityarray)
    CASE(3)
        CALL pickItemRandomly (size)
    CASE(4)
        CALL calcListTotals
(pricearray,quantityarray,totalprice,totalquantity)
        CALL printList(size,itemarray,pricearray,quantityarray,totalprice, totalquantity)
    CASE(5)
        CALL sortByItem(itemarray, pricearray, quantityarray)
    CASE(6)
        CALL sortByPrice(itemarray, pricearray, quantityarray)
    CASE(7)
        CALL writeListtoFile(size,itemarray, pricearray, quantityarray)

    CASE(8)
        CALL search(itemarray, ItemSought, Found, Location)
    CASE(9)
        STOP
END SELECT
END DO



END PROGRAM

有什么建议吗??我真的需要解决这个问题,所以任何帮助都将不胜感激。非常感谢!!

【问题讨论】:

  • 我自然无法从给定的数据中重现它,但是从我的谷歌搜索来看,似乎在使用不同版本的编译器时会发生此错误(顺便说一句,您使用的是什么编译器,g95?)。一些可能具有一定相关性的链接。 forum.wrfforum.com/viewtopic.php?f=20&t=1205docstoc.com/docs/37887247/Athena-Knowledge-Base
  • 可能需要在第二个文档中向下滚动一点。
  • @Rook 是的,我正在使用 g95
  • @EuropaDust - 好吧,把它放到一些粘贴网站 (gist.github.com) - 但先试试 Jonathan 的建议。
  • @EuropaDust - 您需要提供放置位置的链接。例如,我写了一些文字,点击“创建公共要点”,然后我得到了一个链接:gist.github.com/925181 另外,不是针对这个,而是针对您发布的其他一些问题;始终放入编译器并复制粘贴您遇到的错误将是一个好主意(默认情况下)。如果没有其他原因,但为了避免让人们有理由发布诸如“你使用什么编译器”之类的问题......

标签: module fortran fortran95


【解决方案1】:

正如 Rook 所说,问题在于编译器版本;不知何故,第一次编译 list5 的 .mod 文件是由较旧的编译器生成的。清除所有 .o 和 .mod 文件,然后重试,首先编译 list5.f90(或任何包含模块 list5 的文件),然后编译主程序。

【讨论】:

  • 当我单独编译模块时,错误信息消失了。但是,如果与模块分开编译,程序是否仍然能够运行?即:当我准备好正常运行程序时,错误消息会再次出现吗?谢谢!
  • 所以我尝试按照您的建议继续单独编译,但最初错误消失了,正如我在之前的评论中所说,但现在我有一个我一生中从未见过的完全奇怪的错误.这也是一个很长的错误消息。
  • 是的,模块和程序不必同时编译。它们必须以适当的顺序并使用相同的编译器进行编译。所以如果一个程序或过程使用了一个模块,你需要先编译这个模块。不允许循环依赖!您可以在单独的步骤中进行编译,也可以使用一个编译命令进行编译,但无论哪种情况,文件的顺序都很重要。如果您向我们展示您的新错误,也许我们可以提供帮助....
  • 但是如果程序和它的模块只是单独编译,它应该如何运行呢?新的错误消息发生在 b/c 我正在从我的模块中调用某些东西并且 b/c 我的模块没有同时被编译,我认为编译器将它视为垃圾。
  • 当你编译(例如,g95 -c list5.f90)模块的源代码时,你会得到一个“list5.mod”和一个“list5.o”。对象 (.o) 文件包含已编译(但未链接)的代码; .mod 文件就像一个 .h 文件或其他东西;它包含编译所需的非常详细的类型信息,而不是链接。正如 MSB 所说,首先编译模块源代码,然后编译程序主体,然后将它们链接在一起(g95 -o mainlist mainlist.o list5.o)。您不需要 .mod 进行链接,仅用于编译。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-28
  • 2020-05-11
  • 2021-01-08
  • 2020-06-22
  • 2012-11-21
  • 2020-12-13
  • 1970-01-01
相关资源
最近更新 更多