아치 리눅스에서 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'
, 그것은 여전히 작동하지 않으면
.
nchar = '00001'
, 그것은 여전히 작동하지 않으면newunit=ilun
을 unit=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.
은 컴파일 가능한 예제를 게시하시기 바랍니다 사용하여 설치를 업데이트해야합니다. [mcve] 우리 컴퓨터에서 테스트 할 수 있습니다. MCVE를 만들 때 모듈 종속성을 제거하십시오. –
문제는 내가 아직 이해하지 못하는 외부의 이유로 코드가 충돌하는 것 같습니다. 내 게시물에 컴파일 가능한 (그리고 작동하는) 예제를 추가했습니다. – cphyc
나를 위해 * 충돌 * 충돌하지 않습니다. 그러나 구조는 충돌하는 것과 동일하므로 컴파일러 문제 일 수 있습니다. – cphyc