我正在尝试使用 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 。我什至无法找到生成此输出的位置。
如果有人过去遇到过这个问题和/或可能有一些建议,我将非常感激。
感谢您的时间