f2py (아래 나열)로 컴파일하려고하는 Fortran 모듈이 있습니다. 모듈 선언을 제거하고 서브 루틴을 파일에 그대로두면 모든 것이 잘 동작합니다. 모듈은 다음과 같이 선언 된 경우, 나는 다음과 같은 결과를 얻을 :f2py로 fortran 모듈 컴파일
> f2py.py -c -m its --compiler=mingw itimes-s2.f
...
Reading fortran codes...
Reading file 'itimes-s2.f' (format:fix,strict)
crackline: groupcounter=1 groupname={0: '', 1: 'module', 2: 'interface', 3: 'subroutine'}
crackline: Mismatch of blocks encountered. Trying to fix it by assuming "end" statement.
...
c:\users\astay13\appdata\local\temp\tmpgh5ag8\Release\users\astay13\appdata\local\temp\tmpgh5ag8\src.win32-3.2\itsmodule.o:itsmodule.c:(.data+0xec): undefined reference to `itimes_'
collect2: ld returned 1 exit status
무엇 f2py의 모듈이나 서브 루틴을 컴파일에 대해 다른? f2py가 문제를 일으키는 중요한 것을 모듈에 남겨 두었습니까? gfortran을 단독으로 사용하면 모듈이 잘 컴파일됩니다.
소프트웨어 : Windows 7; gcc, gfortran 4.6.1 (MinGW); 파이썬 3.2.2; f2py V2
itimes-s2.f :
module its
contains
subroutine itimes(infile,outfile)
implicit none
! Constants
integer, parameter :: dp = selected_real_kind(15)
! Subroutine Inputs
character(*), intent(in) :: infile
character(*), intent(in) :: outfile
! Internal variables
real(dp) :: num
integer :: inu
integer :: outu
integer :: ios
inu = 11
outu = 22
open(inu,file=infile,action='read')
open(outu,file=outfile,action='write',access='append')
do
read(inu,*,IOSTAT=ios) num
if (ios < 0) exit
write(outu,*) num**2
end do
end subroutine itimes
end module its
나는'f2py -c --compiler = mingw32 -m itsm itimes-s2.f'를 실행하려했지만 오류 메시지는 여전히 동일하다. – astay13
파일의 이름을 .f90 접미어로 바꾸십시오. 컴파일러는 고정 된 형식의 파일이라고 가정합니다 (최소한 내 시스템에서는). 'f2py -c -m itsm itimes-s2.f90'을 사용하고 있습니다. 나는 2 개의 다른 리눅스 컴퓨터에 그것을 시험했다. –
감사합니다 블라디미르! 파이썬 모듈과 포트란 모듈이 같은 이름을 가지고있다하더라도, 확장자를 .f90으로 변경 한 것은 훌륭했습니다. – astay13