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