私は少し前に書いたPython実装のスピードアップをしようとしており、そのためにf2pyを使うことに決めました。私は現在、まだいくつかのものをテストしており、FFTW3を動作させるためにいくつかの助けが必要だと思っています。最初のテストのために、私は次のサブルーチンを書いた:f2pyでFFTW3とリンクするには?
subroutine initFFT(planF, a, res, n)
implicit none
include "fftw3.f"
integer, INTENT(IN) :: n
complex(KIND=8), dimension(n) :: a, res
integer(KIND=8), intent(OUT) :: planF
call dfftw_plan_dft(planF, 1, n, a, res, FFTW_FORWARD, FFTW_MEASURE)
end subroutine initFFT
subroutine operation(a, res, n, planF)
implicit none
INCLUDE 'fftw3.f'
integer :: n
integer(KIND=8) :: planF
complex(KIND=8), dimension(n), intent(IN) :: a
complex(KIND=8), dimension(n), intent(OUT) :: res
call dfftw_execute_dft(planF, a, res)
end subroutine operation
私は
をシンプルなメインプログラム
program test
implicit none
integer, parameter :: n = 3
integer(KIND=8) :: planF
complex(KIND=8), dimension(n) :: res, a
call initFFT(planF, a, res, n)
a = (/ 1., 1., 1./)
call operation(a, res, n, planF)
end program test
でこれをテストし、
gfortran -o ftest myFun.f90 -L/usr/lib -lfftw3 -I/usr/include
でコンパイルされたすべてが働いて、正しい結果を返しました。今、私は次のようにf2pyでこれを使用しようとしました:
f2py -c myFun.f90 -m modf --f90flags="-L/usr/lib -lfftw3 -I/usr/include"
問題は、私は(輸入MODFと)Pythonで作成したモジュールをインポートしようとすると、私は、次のようなエラー・メッセージが表示されますことを、次のとおりです。
Import Error: modf.so undefined symbol: dfftw_execute_dft_
私はGoogleとかなりの時間を過ごしましたが、何とか今まで何も役に立たなかったようです。誰かがこれを解決するためのアイデアを持っていますか?
ごとところでdfftw *手順が二重precision'引数 'のために定義されているようなオプションは、前にFortranのファイル名を与えられています。醜い 'kind = 8'はそれとの互換性が保証されていません。 –
ありがとう、ええ、私は '倍精度'としてそれを持っています - まだ "古い"形式にも使用されています。 – rammelmueller