2011-10-18 18 views
2

f2pyで単純にfortran90コードをラップする必要があります。 FORTRANモジュール "test.f90は"f2pyエラー:未定義シンボル

module util 

contains 

FUNCTION gasdev(idum) 
implicit none 
INTEGER(kind=4), intent(inout) :: idum 
REAL(kind=8) :: gasdev, ran2 
print*,idum 
gasdev = ran2(idum) 
return 
END FUNCTION 

FUNCTION ran2(idum) 
implicit none 
INTEGER(kind=4), intent(inout) :: idum 
REAL(kind=8) :: ran2 
print*,idum 
ran2=2.D0 
return 
END FUNCTION 
end module util 

ですし、私は

f2py -m test -c test.f90 

とそれを包むが、私はpythonの

In [2]: import test 

でそれをインポートするときには、

というエラーで私を促しました
ImportError: ./test.so: undefined symbol: ran2_ 

それを修正するには?ありがとう。

答えて

5

関数gasdevでは、ran2を外部関数として宣言します。そのような関数をリンクしないと、モジュールのインポートは失敗します。代わりに

、RAN2呼び出しはモジュール内のRAN2関数に明示的なインターフェイスを使用して、すべてが働く場合には、gasdevにRAN2の宣言を削除してください。

+0

ありがとうございます。憂鬱な部分は、コードがFortranコンパイラ自体はうまく機能していることで、エラーが正常に動作しますコンパイル、確か – nye17

+0

...かなり私に照射されていないf2pyで吐き出します。しかし、コードベースのどこかに外部プロシージャran2を持たない限り、リンクは別の問題かもしれません。 – janneb

+0

私は 'external'キーワードを使用して外部関数を指定する必要があることを考えるために使用され、私はそれを宣言するとき、それはとてもすでにあることに気づいたことがありません... – nye17

関連する問題