我想使用f2py将我的Python程序与Fortran模块进行接口连接。
我使用的是Win7平台。
我使用最新的Anaconda 64(1.7)作为Python+NumPy堆栈。
我的Fortran编译器是最新的Intel Fortran编译器64(版本14.0.0.103 Build 20130728)。
当执行f2py -c -m PyModule FortranModule.f90 --fcompiler=intelvem
时,我遇到了许多问题。
其中一个问题是似乎f2py/distutils传递给编译器的标志序列与ifort所期望的不匹配。
当调用ifort时,我会收到一系列关于未知选项的警告消息。
ifort: command line warning #10006: ignoring unknown option '/LC:\Anaconda\libs'
ifort: command line warning #10006: ignoring unknown option'/LC:\Anaconda\PCbuild\amd64'
ifort: command line warning #10006: ignoring unknown option '/lpython27'
我怀疑这与我的链接器最后出现的错误有关。
error LNK2019: unresolved external symbol __imp_PyImport_ImportModule referenced in function _import_array
error LNK2019... and so forth (there are about 30-40 lines like that, with different python modules missing)
并且这个内容以普通文本形式结束。
fatal error LNK1120: 42 unresolved externals
我猜这是因为选项序列中缺少/link标志。由于这个原因,/l /L选项没有传递给链接器,编译器认为这些是针对他的。
f2py生成的ifort命令看起来像这样:
ifort.exe -dll -dll Pymodule.o fortranobject.o FortranModule.o module-f2pywrappers2.o -LC:\Anaconda\libs -LC:\Anaconda\PCbuild\amd64 -lPython27
我不知道为什么"-dll"会被重复两次(我必须将该标志从原始的“-shared”更改)。现在,我已经试图查看f2py和distutils代码,但是还没有弄清楚如何在命令输出中添加额外的/link。我甚至没有找到生成此输出的位置。如果有人遇到过这个问题或者有一些建议,我会非常感激。谢谢您的时间。