2016-08-30 38 views
0

f2pyは、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 私はエラーの膨大な数を取得するコンパイルしようとした後。どうしましたか? Ubuntuと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) 

は、ラップファイルを見ると、私たちはラッパーは非常に怪しげな意思決定をしたことを参照してください。それは最後にコメントを追加しましたラインのが、その後、2行目にそれにコメントを宣言せずにコメントをラインラップ:私は、あなたを助ける方法がわからない

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の出力で私の質問を更新しました。 –

関連する問題