【发布时间】:2012-03-26 03:55:21
【问题描述】:
我希望使用 ctypes 来调用几年前我的老板编写的一些旧的 fortran 库。我按照this previous question中给出的例子,得到了预期的结果。
但是,当我修改代码时,要稍微接近我所面临的情况,这样
integer function addtwo(a, b)
integer, intent(in) :: a, b
addtwo = a + b
end function
变成
real function addtwo(a, b)
integer, intent(in) :: a, b
addtwo = a + b
end function
即,函数现在是real,而不是integer,返回的值始终是0。谁能解释发生了什么以及我应该如何解决这个问题?
(PS. 我在 mac os snow leopard 上使用的是 64 位 gfortran 编译器)
编辑:我正在努力的功能看起来像:
real function ykr(seed)
integer, intent(in) :: seed
real ykr0
ykr= real(seed)
end function
真的,ykr 递归地调用另一个函数ykr0,但由于即使在这个基本方面我也在苦苦挣扎,所以我暂时忽略它。我看不出这段代码和上面的代码有什么不同,但是调用ykr_(byref(c_int(4)))返回0,而不是预期的4......
【问题讨论】:
-
你为什么不使用 NumPy 自带的 Fortran FFI 东西?
-
你是说f2py?它给我的系统带来了很多麻烦,我认为这将是一个很好的短期解决方案。理论上!
-
你可以试试
addtwo = real(a+b),它解决了吗? -
确实如此,但已在主代码中实现(请参阅编辑),但我仍然没有得到预期的结果。不过,我看不出这两个函数之间有什么区别。