我有一个棘手的问题,我不知道错误来自哪里。
我在计算过程中偶尔写出数据,总是将当前数据附加到现有文件中,使用:
OPEN(UFO_FU,FILE=FNAME,STATUS="OLD",POSITION='APPEND', &
FORM='UNFORMATTED',access='STREAM')
这在我的计算机和CLUSTER上工作得很好,但是在我同事的计算机上,数据没有被追加,但文件被覆盖了。
我通过在open语句之后查询当前文件位置来检查这个:
INQUIRE(UNIT=UFO_FU, POS=I)
WRITE(*,*) "BLOCK", BN,"POS",I
所以我们做了一些测试,结果非常混乱:
它可以在我的计算机上使用ifort(13.1.1)和gfortran(4.3.4)。
我的同事有相同的编译器版本但是如果他用gfortran编译代码没有正确追加,ifort仍然有效。
到目前为止,它在他的计算机上看起来像是一个gfortran配置问题,但是在他的计算机上编译的程序在我的计算机上正常运行,并且在我的计算机上编译的程序在他的计算机上无法正常工作(再次只有gfortran)
在我看来,gfortran只存在运行时问题,但我无知在哪里看。
我们都在使用SUSE-Linux:
Linux版本3.0.13-0.27-default(geeko @ buildhost)(gcc版本4.3.4 [gcc-4_3-branch revision 152973](SUSE Linux))#1 SMP Wed Feb 15 13:33:49 UTC 2012 (d73692b)
SUSE Linux Enterprise Desktop 11(x86_64)
ldd-对于ifort版本:
linux-vdso.so.1 => (0x00007fffdd9ff000)
libm.so.6 => /lib64/libm.so.6 (0x00007f33af57f000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f33af361000)
libc.so.6 => /lib64/libc.so.6 (0x00007f33aefe9000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f33aedd3000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f33aebce000)
/lib64/ld-linux-x86-64.so.2 (0x00007f33af848000)
Version information:
bin/tascom3d:
libdl.so.2 (GLIBC_2.2.5) => /lib64/libdl.so.2
libpthread.so.0 (GLIBC_2.2.5) => /lib64/libpthread.so.0
libgcc_s.so.1 (GCC_3.0) => /lib64/libgcc_s.so.1
libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6
libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
/lib64/libm.so.6:
libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
/lib64/libpthread.so.0:
ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
ld-linux-x86-64.so.2 (GLIBC_2.2.5) => /lib64/ld-linux-x86-64.so.2
ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2
libc.so.6 (GLIBC_2.3.2) => /lib64/libc.so.6
libc.so.6 (GLIBC_PRIVATE) => /lib64/libc.so.6
libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
/lib64/libc.so.6:
ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2
ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
/lib64/libgcc_s.so.1:
libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
/lib64/libdl.so.2:
ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2
libc.so.6 (GLIBC_PRIVATE) => /lib64/libc.so.6
libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
和gfortran版本:
linux-vdso.so.1 => (0x00007fff4d9ff000)
libgfortran.so.3 => /usr/lib64/libgfortran.so.3 (0x00007f69375d0000)
libm.so.6 => /lib64/libm.so.6 (0x00007f6937356000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f6937140000)
libc.so.6 => /lib64/libc.so.6 (0x00007f6936dc8000)
/lib64/ld-linux-x86-64.so.2 (0x00007f6937905000)
Version information:
bin/tascom3d:
libgcc_s.so.1 (GCC_4.0.0) => /lib64/libgcc_s.so.1
libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
libgfortran.so.3 (GFORTRAN_1.0) => /usr/lib64/libgfortran.so.3
libm.so.6 (GLIBC_2.2.5) => /lib64/libm.so.6
/usr/lib64/libgfortran.so.3:
libm.so.6 (GLIBC_2.2.5) => /lib64/libm.so.6
libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6
libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
/lib64/libm.so.6:
libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
/lib64/libgcc_s.so.1:
libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
/lib64/libc.so.6:
ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2
ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
我搜索了一些类似的问题,但却找不到任何东西。
我非常感谢您的想法和帮助。
亲切的问候,
罗马
@edit:添加了ldd信息 @ edit2:添加了ldd -v info
答案 0 :(得分:0)
作为一种可能的工作,你可以试试这个:
integer sz
open(unit,file='..',access='stream')
inquire(unit,size=sz)
write(unit,pos=sz)
假设无论出于何种原因升级编译器都不是一个好选择。