我有一个棘手的问题,我不知道错误是从哪里来的。
在我的计算过程中,我多次写数据,总是将当前数据附加到现有文件中,使用:

OPEN(UFO_FU,FILE=FNAME,STATUS="OLD",POSITION='APPEND',              &
       FORM='UNFORMATTED',access='STREAM')

这在我的计算机和我们的集群上运行得很好,但是在我同事的计算机上,数据不会被追加,但是文件会被覆盖。
我通过查询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_U 3-branch revision 152973](SUSE Linux))1 SMP星期三2012年2月15日13:33:49 UTC(D73692B)
SUSE Linux企业桌面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

我找了一些类似的问题,但什么也找不到。
我非常感谢你的意见和帮助。
谨致问候,
古罗马的
@编辑:添加了LDD信息
@edit2:添加了ldd-v信息

最佳答案

作为可能的解决方法,您可以尝试以下操作:

 integer sz
 open(unit,file='..',access='stream')
 inquire(unit,size=sz)
 write(unit,pos=sz)

不管出于什么原因,假设升级编译器不是一个好的选择。

关于linux - Fortran position ='append'不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24157805/

10-12 17:31