2011-10-18 66 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 

包,但是當我將其導入蟒蛇

In [2]: import test 

它促使我與錯誤說

ImportError: ./test.so: undefined symbol: ran2_ 

任何有關如何 要解決這個問題?謝謝。

回答

5

在函數gasdev中,聲明瞭ran2作爲外部函數。因爲你沒有鏈接任何這樣的功能導入模塊將失敗。

相反,刪除gasdev中的ran2聲明,在這種情況下,ran2調用使用模塊中的ran2函數的顯式接口,並且一切正常。

+0

謝謝。令人沮喪的是,Fortran編譯器本身的代碼運行良好,並且由f2py吐出的錯誤對我來說不是很明顯...... – nye17

+0

當然,編譯會正常工作。但是,鏈接可能是另一個問題,除非你的代碼庫中有一個外部過程ran2。 – janneb

+0

我曾經認爲我必須使用'external'關鍵字來指定一個外部函數,當我聲明它的時候從來沒有意識到它已經是這樣了...... – nye17