我使用Win7,为python安装了Anaconda,为fortran安装了gfortran(MINGW)。在
使用f2py之后,我找不到扩展模块文件。 我尝试了以下链接中的示例:
F2PY - Calling Fortran routines from Python
如果我在Anaconda提示符中输入以下内容
<base> C:\Codes\F2PY> f2py -c --fcompiler=gfortran -m fib1 fib1.f
然后生成fib1.cp36-win_amd64.pyd
文件和fib1
文件夹。
.libs
文件夹位于fib
文件夹下,.libs
文件夹中存在{
但是,没有生成预期的扩展模块(fib1.so
)。在
我错过了什么吗?在
我已经分别检查了gfortran和python是否运行良好。在
^{pr2}$C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.15.26726\bin\HostX86\x64\link.exe /nologo
/INCREMENTAL:NO /LTCG /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO /LIBPATH:c:\mingw\lib\gcc\mingw32\6.3.0 /LIBPATH:c:\mingw\lib /LIBPATH:D:\Anaconda\libs /LIBPATH:D:\Anaconda\PCbuild\amd64 /LIBPATH:D:\Anaconda\libs /LIBPATH:D:\Anaconda\PCbuild\amd64 /LIBPATH:"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.15.26726\ATLMFC\lib\x64" /LIBPATH:"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.15.26726\lib\x64" /LIBPATH:"C:\Program Files (x86)\Windows Kits\10\lib\10.0.17134.0\ucrt\x64" /LIBPATH:"C:\Program Files (x86)\Windows Kits\10\lib\10.0.17134.0\um\x64" /EXPORT:PyInit_fib1
C:\Users\6829396\AppData\Local\Temp\tmpo3wc2rbs\Release\Users\6829396\AppData\Local\Temp\tmpo3wc2rbs\src.win-amd64-3.6\fib1module.obj C:\Users\6829396\AppData\Local\Temp\tmpo3wc2rbs\Release\Users\6829396\AppData\Local\Temp\tmpo3wc2rbs\src.win-amd64-3.6\fortranobject.obj C:\Users\6829396\AppData\Local\Temp\tmpo3wc2rbs\Release\libfib1.5W62YGKMVL6PD3QLPPSXTQ2OGA5LRIRQ.gfortran-win_amd64.lib /OUT:.\fib1.cp36-win_amd64.pyd /IMPLIB:C:\Users\6829396\AppData\Local\Temp\tmpo3wc2rbs\Release\Users\6829396\AppData\Local\Temp\tmpo3wc2rbs\src.win-amd64-3.6\fib1.cp36-win_amd64.lib
copying C:\Users\6829396\AppData\Local\Temp\tmpo3wc2rbs\Release\.libs\libfib1.5W62YGKMVL6PD3QLPPSXTQ2OGA5LRIRQ.gfortran-win_amd64.dll -> .\fib1\.libs
Removing build directory C:\Users\6829396\AppData\Local\Temp\tmpo3wc2rbs
我还使用win7+Anaconda+gfortran(MINGW),在试图包装包含在
sdistan.f90
文件中的subroutine distan(x,nx,nd,d)
时遇到了同样的问题。在命令
python -m numpy.f2py -c -m sdistan sdistan.f90
生成了一个sdistan.cp37-win_amd64.pyd
文件,而不是*.so
模块。在在分析带有depends.exe的
sdistan.cp37-win_amd64.pyd
文件后,我发现有两个未解析的外部依赖关系:(1)放在
sdistan/.libs
文件夹中的libsdistan.LD66OEXBPEJ74HMF6SZDLFFCVSPSTQVW.gfortran-win_amd64.dll
DLL文件。在(2)和
python3.dll
我把这两个文件(第二个来自
C:/Anaconda3/python3.dll
)复制到我的工作目录中,问题就解决了。在现在我可以
import sdistan
并且可以使用我的函数作为output=sdistan.distan
(输入参数)。在我希望这能帮助那些发现同样问题的人。如果有人能解释并纠正这种(奇怪/遗漏)行为,那就太好了。在
感谢大家对堆栈溢出的贡献!!在
相关问题 更多 >
编程相关推荐