如何使用f2py从Fortran程序创建Python模块?
我正在尝试用Python读取一些smps文件,发现有一个Fortran的实现,所以我想试试f2py。不过,我对Fortran没有任何经验。
我已经在我的Linux电脑上成功安装了gfortran和f2py,并且运行了f2py页面上的示例,但在编译和运行一个较大的程序时遇到了一些问题。这个程序有两个文件,一个是文件读取的包装器,另一个是包含所有逻辑的部分。它们似乎是相互调用的,但当我编译和链接或者尝试使用f2py时,出现了错误,提示它们似乎找不到彼此:
f95 -c FILEWR~1.F
f95 -c SMPSREAD.F90
f95 -o smpsread SMPSREAD.o FILEWR~1.o
FILEWR~1.o In function `file_wrapper_'
FILEWR~1.F(.text+0x3d) undefined reference to `chopen_'
usrlibgcci486-linux-gnu4.4.1libgfortranbegin.a(fmain.o) In function `main'
(.text+0x27) undefined reference to `MAIN__'
collect2 ld returned 1 exit status
我还尝试把文件名改成FILE_WRAPPER.F,但这并没有解决问题。
在使用f2py时,我发现我需要添加一个注释才能让它接受自由格式的文件,于是我保存为一个新文件并尝试:
f2py -c -m smpsread smpsread.f90
我得到了很多输出和警告,但错误似乎是这个:
getctype: No C-type found in "{'typespec': 'type', 'attrspec': ['allocatable'], 'typename': 'node', 'dimension': [':']}", assuming void.
你可以在这里找到Fortran 90的spms读取器。
任何帮助或建议都非常感谢。
1 个回答
0
我建议你完全跳过Fortran的部分。
http://myweb.dal.ca/gassmann/smps2.htm
MPS记录的结构在这里有介绍,看起来用Python来解析还是比较简单的。
http://myweb.dal.ca/gassmann/smps2.htm#CoreMPSline
反正你都需要为所有的数据定义合适的Python类(或者命名元组)。
我觉得Fortran并没有什么帮助。