2017-12-14 53 views
0

아치 리눅스에서 GNU Fortran (GCC) 7.2.1 20171128로 컴파일 된 코드를 작성하여 파일에 쓰려고합니다. 오류 Fortran runtime error: End of file을 제기, 파일, 코드 충돌에 쓰기 할 때 단위는 newunit=... 포트란 2008 기능"Fortran 런타임 오류 : 파일 끝"쓰기 중

열립니다.

비 작동 코드

최소 비 작동 버전 코드입니다. 파일이 존재하지 않는 경우 코드는 여기에 gfortran 7.2.1

program foo 
    implicit none 

    character(len=80) :: filename 
    character(len=5) :: nchar 

    integer :: ilun=1 

    call title(1, nchar) 
    ! nchar = '00001' 

    filename = trim(nchar)//'.txt' 

    write(*, '(a, "<", a, ">")') 'filename ', trim(filename) 
    open(newunit=ilun, file=trim(filename), form='formatted', status='replace') 
    write(ilun, '(a1,a12,a10)') '#', 'Family', 'Count' 
    close(ilun) 
end program foo 

subroutine title(n, nchar) 
    implicit none 
    integer, intent(in) :: n 
    character(len=5), intent(out) :: nchar 
    write(nchar, '(i0.5)') n 

end subroutine title 

내가 rm -f 00001.txt; gfortran foo.f90 -o a.out && ./a.out을 사용하고 명령으로 충돌합니다.

비교하여 코드

근무, 다음 코드는 컴파일과 동일한 시스템

프로그램 foo는 여기에

implicit none 

    character(len=80) :: filename 
    character(len=5) :: nchar 

    integer :: ilun=1 

    ! call title(1, nchar) 
    nchar = '00001' 

    filename = trim(nchar)//'.txt' 

    write(*, '(a, "<", a, ">")') 'filename ', trim(filename) 
    open(newunit=ilun, file=trim(filename), form='formatted', status='replace') 
    write(ilun, '(a1,a12,a10)') '#', 'Family', 'Count' 
    close(ilun) 
end program foo 

에 완벽하게 작동 내가 rm -f 00001.txt; gfortran foo.f90 -o a.out && ./a.out을 사용하고 명령입니다.

ifort를 사용하여 컴파일 할 때

이 두 코드는 잘 작동 중요 사항 때문에뿐만 아니라 GNU 포트란 (GCC) 6.4.1 20,171,003와 GNU 포트란 (GCC) 7.2.0 (모든 버전은 ifort18 ifort15 사이에 시도) gfortran 버전 7.2.1 또는 아치 리눅스에 번들로 제공되는 버전에 문제가있는 것으로 보입니다.

몇 가지 의견
  • 당신이 작동하지 않는 예제에서 주석 nchar = '00001', 그것은 여전히 ​​작동하지 않으면

.
  • newunit=ilununit=ilun으로 변경하면 예 : ilun=10 전에, 그것은 어떤 경우에 작동
  • 시스템 정보

    OS : GNU 리눅스 분포 : 아치 리눅스 (- - 날짜 15-12-2017 기준)

    $ uname -a 
    Linux manchot 4.14.4-1-ARCH #1 SMP PREEMPT Tue Dec 5 19:10:06 UTC 2017 x86_64 GNU/Linux 
    $ gfortran --version 
    GNU Fortran (GCC) 7.2.1 20171128 
    Copyright (C) 2017 Free Software Foundation, Inc. 
    This is free software; see the source for copying conditions. There is NO 
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
    
    +0

    은 컴파일 가능한 예제를 게시하시기 바랍니다 사용하여 설치를 업데이트해야합니다. [mcve] 우리 컴퓨터에서 테스트 할 수 있습니다. MCVE를 만들 때 모듈 종속성을 제거하십시오. –

    +0

    문제는 내가 아직 이해하지 못하는 외부의 이유로 코드가 충돌하는 것 같습니다. 내 게시물에 컴파일 가능한 (그리고 작동하는) 예제를 추가했습니다. – cphyc

    +0

    나를 위해 * 충돌 * 충돌하지 않습니다. 그러나 구조는 충돌하는 것과 동일하므로 컴파일러 문제 일 수 있습니다. – cphyc

    답변

    2

    이 문제는 Gfortran 7.2.1의 아치 리눅스 배포판과 관련이 있습니다. 이제 수정되었습니다 (https://bugs.archlinux.org/task/56768 참조). 당신은 문제가 발생하는 경우

    , 당신은``[몇 가지 물건을] 않고

    pacman -Syu gcc-fortran