工作的Fortran编译器有时会生成无效的Win32 .exe文件
大家好,
在某些情况下,几个工作正常的Fortran编译器似乎有一个奇怪的行为。我试图编译并运行John Denton教授的程序,可以在这里找到:
https://www.dropbox.com/sh/8i0jyxzjb57q4j4/AABD9GQ1MUFwUm5hMWFylucva?dl=0
程序Meangen和Stagen的不同版本可以编译并正常运行。最后一个名为Multall的程序也有几个不同的版本。和以前一样,可以正确编译适当的源代码。但是:当我尝试运行生成的.exe文件时,收到一条非常奇怪的错误消息,说Multall的.exe不是有效的Win32可执行文件。
我在Windows XP和Windows 8上使用了四个不同的Fortran编译器(g77,Cygwin,Mingw,FTN95),总是得到相同的结果。我进行了几次测试,在我看来,奇怪的错误消息的原因是Multall包含了大量的源代码。有超过16000行代码,因此也许编译器默认为代码段分配的内存太小而发生溢出。
我尝试了g77编译器的几个命令行选项,以增加代码段的内存量,但是没有一个起作用。谁能告诉我g77的哪些命令行选项可以使Multall的.exe大型程序正常工作?还是我错了,奇怪的错误消息与代码段无关?谁可以帮助我?
非常感谢,非常感谢您的帮助
答案 0 :(得分:2)
实际上,问题不是程序大小,而是堆栈大小。这是由于公共块较大。作为测试,您可以将commall-open-18.3中的JD减少到1000,您将注意到问题已解决。 您可以检查数组是否没有过大,并调整一些参数。