我有很长的fortran代码,必须从python中使用。我决定做Fortran-> C-> Python接口。
我遇到了一个问题:我在包含
的Fortran模块中派生了类型double precision, allocatable
键入成员。
当尝试用ifort编译时,我得到了(与gfortran相似):
Each component of a derived type with the BIND attribute shall be a nonpointer,
nonallocatable data component with interoperable type and type parameters
这实际上与英特尔编译器文档和Fortran 2003标准一致:第15.2.5点。
有没有办法访问带有allocatable或指针的Fortran“type”?
答案 0 :(得分:1)
不是真的。即使是全新的TS 29113
不提供解决方案。它有TYPE(*)
但您必须知道如何解码C中的结构。您可以通过逆向工程来完成。
在引用的TS中,实际上有一个宏的结构大小。见CFI_attribute_allocatable
。但解除引用的问题仍然存在。建议使用标准数组描述符,但某些编译器(特别是gfortran)尚不支持此TS。
可能的是,只需将指向结构的指针传递给通用函数,例如qsort
。然后你只使用一块内存,它恰好也包含一些指针或可分配的描述符,但C不必知道它们。
另一种可能性是构造一个仅包含type(c_ptr)
的派生类型,而不是Fortran指针,并使用c_loc()
来填充它们。确保只有连续的数组。