2016-08-30 3 views
0

f2py는 FORTRAN 서브 루틴을 컴파일하려고 시도 할 때 오류를 발생시킵니다.이 FORTRAN 서브 루틴은 배열을 전달하는 다른 FORTRAN 함수를 호출합니다. 문제를 해결하기 위해 코드를 단순화했습니다.f2py Fortran 함수 인터페이스 컴파일 오류

SUBROUTINE MAS (matrix, a) 
    IMPLICIT NONE 
    INTERFACE 
     LOGICAL FUNCTION LTRY(input_array) 
      IMPLICIT NONE 
      INTEGER*4 :: input_array(:,:) 
     END FUNCTION LTRY 
    END INTERFACE 

    INTEGER*4 :: matrix (:,:) 
!f2py INTENT(INOUT) :: matrix(:,:) 
    INTEGER*4 a 
!f2py INTENT(INOUT) :: a 

    a = 1 
    IF (LTRY (matrix)) a = 2 
END SUBROUTINE 

LOGICAL FUNCTION LTRY(input_array) 
    IMPLICIT NONE 
    INTEGER*4 :: input_array (:,:) 

    IF (ANY(input_array == 0)) LTRY = .FALSE. 
END FUNCTION LTRY 

내가 f2py -c -m PTEST ptest.f90 내가 오류의 엄청난 번호를 사용하여이를 컴파일하려고하면. 뭐가 문제 야? 우분투 및 gfortran 컴파일러 사용.

gfortran:f77: /tmp/tmpSZHMCR/src.linux-i686-2.7/ptest-f2pywrappers.f 
/tmp/tmpSZHMCR/src.linux-i686-2.7/ptest-f2pywrappers.f:16.35: 
       function ltry(input) ! in :ptest:ptest.f90:mas:unkno 
            1 
Error: Unexpected junk after function declaration at (1) 
/tmp/tmpSZHMCR/src.linux-i686-2.7/ptest-f2pywrappers.f:18.72: 
        integer, dimension(:,:) :: input 
                     1 
Error: Unexpected data declaration statement in INTERFACE block at (1) 
/tmp/tmpSZHMCR/src.linux-i686-2.7/ptest-f2pywrappers.f:19.72: 
        logical :: ltry 
                     1 
Error: Unexpected data declaration statement in INTERFACE block at (1) 
/tmp/tmpSZHMCR/src.linux-i686-2.7/ptest-f2pywrappers.f:20.17: 
       end function ltry 
       1 
Error: Expecting END INTERFACE statement at (1) 
/tmp/tmpSZHMCR/src.linux-i686-2.7/ptest-f2pywrappers.f:40.32: 
     ltryf2pywrap = .not.(.not.ltry(input_array)) 
           1 
Error: Operand of .not. operator at (1) is INTEGER(4) 
/tmp/tmpSZHMCR/src.linux-i686-2.7/ptest-f2pywrappers.f:16.35: 
       function ltry(input) ! in :ptest:ptest.f90:mas:unkno 
            1 
Error: Unexpected junk after function declaration at (1) 
/tmp/tmpSZHMCR/src.linux-i686-2.7/ptest-f2pywrappers.f:18.72: 
        integer, dimension(:,:) :: input 
                     1 
Error: Unexpected data declaration statement in INTERFACE block at (1) 
/tmp/tmpSZHMCR/src.linux-i686-2.7/ptest-f2pywrappers.f:19.72: 
        logical :: ltry 
                     1 
Error: Unexpected data declaration statement in INTERFACE block at (1) 
/tmp/tmpSZHMCR/src.linux-i686-2.7/ptest-f2pywrappers.f:20.17: 
       end function ltry 
       1 
Error: Expecting END INTERFACE statement at (1) 
/tmp/tmpSZHMCR/src.linux-i686-2.7/ptest-f2pywrappers.f:40.32: 
     ltryf2pywrap = .not.(.not.ltry(input_array)) 
           1 
Error: Operand of .not. operator at (1) is INTEGER(4) 
error: Command "/usr/bin/gfortran -Wall -ffixed-form -fno-second-underscore -fPIC -O3 -funroll-loops -I/tmp/tmpSZHMCR/src.linux-i686-2.7 -I/usr/lib/python2.7/dist-packages/numpy/core/include -I/usr/include/python2.7 -c -c /tmp/tmpSZHMCR/src.linux-i686-2.7/ptest-f2pywrappers.f -o /tmp/tmpSZHMCR/tmp/tmpSZHMCR/src.linux-i686-2.7/ptest-f2pywrappers.o" failed with exit status 1 
Compilation failed. 

일부 오류가 매우 이상하게 보일 : 여기

는 (오류 보고서와 일부) 컴파일러 출력됩니다. 예를 들어, 컴파일러는 논리 함수를 정수로 간주합니다.

+3

어떤 에러가 있습니까? –

+0

제 질문을 편집했습니다 –

답변

0

불행히도 어떤 종류의 오류가 발생했는지 표시하지 않았습니다. 내 시스템에 컴파일하는 것을 시도했다, 나는 오류 메시지를받을 수 있나요 : 우리는 래퍼가 매우 의심스러운 결정을 내린 것을 볼

/tmp/tmpLKy0jV/src.linux-x86_64-2.7/ptest-f2pywrappers.f:16:35: 

       function ltry(input) ! in :ptest:ptest.f90:mas:unkno 
            1 
Error: Unexpected junk after function declaration at (1) 
/tmp/tmpLKy0jV/src.linux-x86_64-2.7/ptest-f2pywrappers.f:18:72: Error: Unexpected data declaration statement in INTERFACE block at (1) 
/tmp/tmpLKy0jV/src.linux-x86_64-2.7/ptest-f2pywrappers.f:19:72: Error: Unexpected data declaration statement in INTERFACE block at (1) 
/tmp/tmpLKy0jV/src.linux-x86_64-2.7/ptest-f2pywrappers.f:20:17: 

       end function ltry 
       1 
Error: Expecting END INTERFACE statement at (1) 
/tmp/tmpLKy0jV/src.linux-x86_64-2.7/ptest-f2pywrappers.f:16:35: 

       function ltry(input) ! in :ptest:ptest.f90:mas:unkno 
            1 
Error: Unexpected junk after function declaration at (1) 
/tmp/tmpLKy0jV/src.linux-x86_64-2.7/ptest-f2pywrappers.f:18:72: Error: Unexpected data declaration statement in INTERFACE block at (1) 
/tmp/tmpLKy0jV/src.linux-x86_64-2.7/ptest-f2pywrappers.f:19:72: Error: Unexpected data declaration statement in INTERFACE block at (1) 
/tmp/tmpLKy0jV/src.linux-x86_64-2.7/ptest-f2pywrappers.f:20:17: 

       end function ltry 
       1 
Error: Expecting END INTERFACE statement at (1) 

은, 랩 된 파일로 상대를 : 그것은 말에 주석을 추가했습니다 라인의,하지만 두 번째 줄에 그것을 코멘트를 선언하지 않고 주석을 선 포장 : 그래도, 당신을 도울 방법을 모르는

C  -*- fortran -*- 
C  This file is autogenerated with f2py (version:2) 
C  It contains Fortran 77 wrappers to fortran functions. 

     subroutine f2pywrapmas (matrix, a, f2py_matrix_d0, f2py_matr 
    &ix_d1) 
     integer*4 a 
     integer f2py_matrix_d0 
     integer f2py_matrix_d1 
     integer*4 matrix(f2py_matrix_d0,f2py_matrix_d1) 
     interface 
     subroutine mas(matrix,a) 
      integer*4, dimension(:,:) :: matrix 
      integer*4 :: a 
      interface ! in :ptest:ptest.f90:mas 
       function ltry(input) ! in :ptest:ptest.f90:mas:unkno 
    &wn_interface 
        integer, dimension(:,:) :: input 
        logical :: ltry 
       end function ltry 
      end interface 
     end subroutine mas 
     end interface 
     call mas(matrix, a) 
     end 

. 하지만 질문에 실제 오류 메시지를 게시하는 것이 좋습니다.

+0

고맙습니다. f2py 출력으로 내 질문을 업데이트했습니다. –