我一直在使用f2py来" pythonize"一些用于64位Windows 7计算机的Fortran代码。我正在使用64位Anaconda 4.2.0并使用通过conda install mingw
安装的MinGW(相关文件夹使用名称" x86_64-w64-mingw32")。在我尝试使用四倍精度(REAL * 16)数字的程序之前,它运行良好。我发现该程序崩溃了(libquadmath-0.dll在Windows生成的崩溃报告的问题签名中被引用)。
我试图找出导致问题的最简单案例。我最终提出了一个相当基本的Fortran程序,它给出了一个致命错误"在某些条件下:
PROGRAM MAIN REAL*8 DL REAL*16 QL DL=2.71828 QL=3.14159 C when compiled with -ffpe-trap=overflow with MinGW distribution for 64-bit Anaconda, uncommenting either of the lines below breaks the program ("fatal error" at runtime) C however, the second line is acceptable if DL is changed to quad precision (REAL*16) C both lines are acceptable if both DL and QL are double precision (REAL*8) OPEN (79) print*, "DL=",DL print*, "Ready to print QL!" print*, "QL=",QL end
如上面的评论中所示,当我使用编译器选项-ffpe-trap=overflow
编译Anaconda MinGW软件包的gfortran时,我收到致命错误。例如,如果两行都没有注释(如上所述),我会得到:
DL= 2.7182800769805908 Ready to print QL! A fatal error occurred! Backtrace for this error: #0 ffffffffffffffff
(有关不同版本的更多详情,请参阅代码中的注释。)
我尝试使用在同一台计算机上设置的标准MinGW32发行版(在msys命令行中编译并运行),并且没有问题。
我相信我已经确认anaconda mingw包中包含的libquadmath-0.dll是64位dll。我无法识别环境变量的任何问题,我想我已经排除了通过临时重命名MinGW32目录使用我的标准MinGW32 32位dll的可能性。
除了32位与64位的区别之外,我注意到我的MinGW32 gfortran基于GCC 4.8.1,而带有64位Anaconda MinGW软件包的gfortran被列为使用GCC&#34 ; 4.7.0 20111220(实验)"。我不确定这是否与此问题有关,但我无法在GCC更改日志中找到任何可以解释我所看到问题的明显内容。
我非常感谢任何人提供的任何提示/解决方案。
如果有人可以使用其他64位MinGW发行版重现此错误,我会特别感兴趣。目前,我不知道这是GCC / gfortran,MinGW,Anaconda或我自己设置特有的其他问题。