【发布时间】:2018-09-24 21:04:33
【问题描述】:
工作中的 Fortran 编译器有时会生成无效的 Win32 .exe 文件
大家好,
一些工作的 Fortran 编译器在某些情况下似乎有奇怪的行为。我尝试编译和运行 John Denton 教授的程序,可以在这里找到:
https://www.dropbox.com/sh/8i0jyxzjb57q4j4/AABD9GQ1MUFwUm5hMWFylucva?dl=0
Meangen und Stagen 程序的不同版本可以编译并正常工作。最后一个名为 Multall 的程序也有几个不同的版本。和以前一样,可以毫无问题地编译适当的源代码。但是:当我尝试运行生成的 .exe 文件时,我收到一条非常奇怪的错误消息,说 Multall 的 .exe 不是有效的 Win32 可执行文件。
我在 Windows XP 和 Windows 8 上使用了四种不同的 Fortran 编译器(g77、Cygwin、Mingw、FTN95),结果总是相同。我进行了几次测试,在我看来,奇怪的错误消息的原因是 Multall 包含大量源代码。代码有16000多行,可能是编译器默认为代码段分配的内存太小导致溢出。
我尝试了 g77 编译器的几个命令行选项以增加代码段的内存量,但都没有奏效。谁能告诉我 g77 的哪些命令行选项可以让 Multall 的 .exe 大型程序正常工作?还是我错了,奇怪的错误信息与代码段无关?谁能帮帮我?
非常感谢,非常感谢您的帮助
【问题讨论】:
-
160,000 并不是一个非常大的程序 - 有很多超过 1,000,000 行的示例,并且这些可以很好地编译。更进一步,您能否向我们展示您所做的确切操作,以及生成的确切错误消息和使用的编译器版本?更好的是看看您是否可以生成一个显示完全相同症状的小代码。这就是说,我在看了 5 分钟后猜测是公共块中的至少 3.8 GByte(应该在 25 年前被抛弃)是导致您的问题的原因。
-
正如 Ian 所暗示的,您必须使用可分配数组(和 x64 模式)才能超过 3.8 GB 的限制。
-
代码大小为 16,000。不是 160,000。但您的评论不受此影响。
标签: fortran