win10系统gfortran(CodeBlocks平台)新建二进制文件导致内存错误
大家好!本人在Window10系统(电脑配置i5-8265U,8G内存,64位操作系统)下安装了CodeBlocks的IDE平台(17.12版本),主要是想使用其gfortran编译器。通过一些简单程序测试了其可用性。但最近碰到一个奇怪的问题:open语句新建一个二进制文件,直接给出如下错误:
Program received signal SIGSEGV: Segmentation fault - invalid memory reference.
Backtrace for this error:
#0ffffffff
源代码很短(放在一个*.f文件中做试验),其实就一个open语句:
implicit real*8 (a-h,o-z)
ICH= 12
IRECSZ= 1
OPEN (UNIT = ICH,
. ACCESS = 'DIRECT',
. FILE = 'JPLEPH',
. FORM = 'UNFORMATTED',
. RECL = IRECSZ,
. STATUS = 'NEW',
. IOSTAT = iostat)
END
试图通过重新设置系统的虚拟内存解决问题,但没有效果。
请高手指点!谢谢!
某个版本区间(具体忘记了)的 gfortran 有这个bug,尝试换个版本吧。(尽可能换个大版本,以避开这个区间。或者索性升级到最新版) kyra 发表于 2020-3-2 10:29
某个版本区间(具体忘记了)的 gfortran 有这个bug,尝试换个版本吧。(尽可能换个大版本,以避开这个区间 ...
感谢提示!前进了一小步,运行时不报内存错误了,但问题还没彻底解决。
我的操作步骤:
1、卸载了内含gfortran的CodeBlocks v17.12,因为发现很难单独更新gfortran,也许是方法不当(替换同名文件,但会提示找不到若干dll文件,无法编译);
2、分别单独安装CodeBlocks v17.12(无编译器版) (codeblocks-17.12-setup.exe)、MinGW最新版(内含gfortran 8.2.0),添加环境变量,显示安装成功,如下:
C:\Users\86155>gfortran -v
Using built-in specs.
COLLECT_GCC=gfortran
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/8.2.0/lto-wrapper.exe
Target: mingw32
Configured with: ../src/gcc-8.2.0/configure --build=x86_64-pc-linux-gnu --host=mingw32 --target=mingw32 --prefix=/mingw --disable-win32-registry --with-arch=i586 --with-tune=generic --enable-languages=c,c++,objc,obj-c++,fortran,ada --with-pkgversion='MinGW.org GCC-8.2.0-5' --with-gmp=/mingw --with-mpfr=/mingw --with-mpc=/mingw --enable-static --enable-shared --enable-threads --with-dwarf2 --disable-sjlj-exceptions --enable-version-specific-runtime-libs --with-libiconv-prefix=/mingw --with-libintl-prefix=/mingw --enable-libstdcxx-debug --with-isl=/mingw --enable-libgomp --disable-libvtv --enable-nls --disable-build-format-warnings
Thread model: win32
gcc version 8.2.0 (MinGW.org GCC-8.2.0-5)
3、运行前述程序(open语句中写出了可给出文件操作结果是否成功的返回值IOSTAT),编译运行时发现不提示内存错误了,但返回值IOSTAT不等于0,即二进制文件还是没成功新建。
implicit real*8 (a-h,o-z)
integer OUT
CVL= 2
ICH= 16
IRECSZ= 1
OPEN (UNIT = ICH,
. FILE = 'JPLEPH',
. ACCESS = 'DIRECT',
. FORM = 'UNFORMATTED',
. RECL = IRECSZ,
. STATUS = 'NEW',
. IOSTAT = iostat)
write(*,*) 'iostat=',iostat
WRITE(ICH,REC=1,IOSTAT=OUT) CVAL
write(*,*) 'OUT=',OUT
END
结果为:
iostat= 17
OUT= 5001
Process returned 0 (0x0) execution time : 3.222 s
Press any key to continue.
目前gfortran单独挂出来的还有9.X版本的,但下载下来试图去替换MinGW的bin中相应文件,发现会报找不到libisl-21.dll、libmpfr-6.dll,无法编译。
还请各位高手支支招。感谢! kyra 发表于 2020-3-2 10:29
某个版本区间(具体忘记了)的 gfortran 有这个bug,尝试换个版本吧。(尽可能换个大版本,以避开这个区间 ...
感谢提示!前进了一小步,运行时不报内存错误了,但问题还没彻底解决。
我的操作步骤:
1、卸载了内含gfortran的CodeBlocks v17.12,因为发现很难单独更新gfortran,也许是方法不当(替换同名文件,但会提示找不到若干dll文件,无法编译);
2、分别单独安装CodeBlocks v17.12(无编译器版) (codeblocks-17.12-setup.exe)、MinGW最新版(内含gfortran 8.2.0),添加环境变量,显示安装成功,如下:
C:\Users\86155>gfortran -v
Using built-in specs.
COLLECT_GCC=gfortran
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/8.2.0/lto-wrapper.exe
Target: mingw32
Configured with: ../src/gcc-8.2.0/configure --build=x86_64-pc-linux-gnu --host=mingw32 --target=mingw32 --prefix=/mingw --disable-win32-registry --with-arch=i586 --with-tune=generic --enable-languages=c,c++,objc,obj-c++,fortran,ada --with-pkgversion='MinGW.org GCC-8.2.0-5' --with-gmp=/mingw --with-mpfr=/mingw --with-mpc=/mingw --enable-static --enable-shared --enable-threads --with-dwarf2 --disable-sjlj-exceptions --enable-version-specific-runtime-libs --with-libiconv-prefix=/mingw --with-libintl-prefix=/mingw --enable-libstdcxx-debug --with-isl=/mingw --enable-libgomp --disable-libvtv --enable-nls --disable-build-format-warnings
Thread model: win32
gcc version 8.2.0 (MinGW.org GCC-8.2.0-5)
3、运行前述程序(open语句中写出了可给出文件操作结果是否成功的返回值IOSTAT),编译运行时发现不提示内存错误了,但返回值IOSTAT不等于0,即二进制文件还是没成功新建。
implicit real*8 (a-h,o-z)
integer OUT
CVL= 2
ICH= 16
IRECSZ= 1
OPEN (UNIT = ICH,
. FILE = 'JPLEPH',
. ACCESS = 'DIRECT',
. FORM = 'UNFORMATTED',
. RECL = IRECSZ,
. STATUS = 'NEW',
. IOSTAT = iostat)
write(*,*) 'iostat=',iostat
WRITE(ICH,REC=1,IOSTAT=OUT) CVAL
write(*,*) 'OUT=',OUT
END
结果为:
iostat= 17
OUT= 5001
Process returned 0 (0x0) execution time : 3.222 s
Press any key to continue.
目前gfortran单独挂出来的还有9.X版本的,但下载下来试图去替换MinGW的bin中相应文件,发现会报找不到libisl-21.dll、libmpfr-6.dll,无法编译。
还请各位高手支支招。感谢! kyra 发表于 2020-3-2 10:29
某个版本区间(具体忘记了)的 gfortran 有这个bug,尝试换个版本吧。(尽可能换个大版本,以避开这个区间 ...
折腾了好几天,放弃。安装了Intel Visual Fortran 2013,一下就正常了。看来在Windows系统下还是用人家配套的东西好! 这种新建文件失败,有挺多的原因,比如写入的目录没有权限之类的。
可以先尝试把
STATUS = 'NEW',
IOSTAT = iostat
去掉。
这些子句,通常在一开始写代码(或者代码只是给自己用)的时候不写。如果后面需要完善(需要编译程序给别人用),再加上。 kyra 发表于 2020-3-3 08:55
这种新建文件失败,有挺多的原因,比如写入的目录没有权限之类的。
可以先尝试把
STATUS = 'NEW',
谢谢版主指点!:-loveliness:
页:
[1]