【问题标题】:Fortran Program Compiling: Segmentation Fault only on WindowsFortran 程序编译:仅在 Windows 上出现分段错误
【发布时间】:2012-11-22 02:06:48
【问题描述】:

我正在尝试编译 Datcom More Info Here,我在 Mac OSX 上使用 gfortran 成功完成了此操作。 为了在 W7 上做同样的事情,我下载了 MinGW 并做了我在 Mac 上做的同样的事情,但我得到了

Program received signal SIGSEGV: Segmentation fault - invalid memory reference 
Backtrace for this error:
#0 6f6a5456
#1 6f69321f
#2 004011e9

当我启动程序时...

$ datcom.exe
Enter the input file name:
EX1.INP

【问题讨论】:

  • 尝试使用选项-fbounds-check 进行编译 - 如果您错误地访问了一个数组,这将在运行时告诉您哪个数组和哪个索引导致了问题。
  • 好的。重新编译后使用该程序,我得到一个新错误:At line 11 of NMTEST.F90Fortran Runtime error: Index '2' of dimension 1 of array 'kol' above upper bound of 1 在 MacOSX 中它可以正常工作:/
  • 我相信这是因为代码遵循 arr(1) 表示 arr(*) (假定大小的数组)的旧约定。所以需要找到如何将 1 视为 * (或手动重写所有这些,这是不切实际的)
  • 对于某些版本的 gfortran,有一个 -fugly-assumed 应该可以解决这个问题,但我不确定最近的版本是否支持它。你在 Mac 上使用的是什么版本,mingw 是什么版本?
  • 您可以尝试使用-std= 选项...也许先尝试-std=legacy,或者-std=f95

标签: macos windows-7 fortran gfortran


【解决方案1】:

感谢您的所有建议,我成功构建了 datcom。 我使用 gcc4 成功安装了 Cygwin(随 4.5.3 gfortran 版本一起提供)。有了这个版本就可以了

gfortran -o datcom *.F90

正确编译软件。

我不知道它是否适用于 Cygwin 和新版本的 gfortran。

非常感谢

【讨论】:

    猜你喜欢
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多