有人可以找出我做错的地方吗,请?我好累。我将MinGW 4.7,python2.7.8,numpy 1.7.1和scipy0.13.2安装到Windows7的Anaconda(32bit)环境中。
另外,对于用户环境变量,我设置了
C_INCLUDE_PATH: d:\ Anaconda2 \ ENVS \ arc103 \ MinGW的\ i686的-W64-的mingw32 \包括
路径(用户变量): C:\ Program Files(x86)\ Microsoft VS code \ bin; D:\ Anaconda2 \ Library \ bin; D:\ Anaconda2 \ envs \ arc103 \ MinGW \ bin
在Anaconda提示中绑定以下命令
“f2py -c --help-fcompiler”输出“...... Fortran编译器发现: --fcompiler = gnu95 GNU Fortran 95编译器(4.7.0)....“
“f2py -c --help-compiler”输出 “可用编译器列表:......”,不是特定的编译器。
根据“NumPy v1.12.dev0手册”运行“f2py -c fib1.f -m fib1”会给我带来很多错误,如下所示:
D:\Anaconda2\envs\arc103\Scripts\gfortran.bat -Wall -Wall -shared c:\users\dkim1\appdata\local\temp\tmpvyedhg\Release\users\dkim1\appdata\local\temp\tmpvyedhg\src.win32-.7\fib1module.oc:\users\dkim1\appdata\local\temp\tmpvyedhg\Release\users\dkim1\appdata\local\temp\tmpvyedhg\src.win32-2.7\fortranobject.o c:\users\dkim1\appdata\local\temp\tmpvyedhg\Release\fib1.o -Ld:\anaconda2\envs\arc103\mingw\lib\gcc\i686-w64-mingw32\4.7.0 -LD:\Anaconda2\envs\arc103\libs -LD:\Anaconda2\envs\arc103\PCbuild -lpython27 -lgfortran -o .\fib1.pyd
c:\users\dkim1\appdata\local\temp\tmpvyedhg\Release\users\dkim1\appdata\local\temp\tmpvyedhg\src.win32-2.7\fib1module.o:fib1module.c:(.text+0x35): undefined reference to `__imp__PyNumber_Int'
c:\users\dkim1\appdata\local\temp\tmpvyedhg\Release\users\dkim1\appdata\local\temp\tmpvyedhg\src.win32-2.7\fib1module.o:fib1module.c:(.text+0x68): undefined reference to `__imp__PyComplex_Type'
c:\users\dkim1\appdata\local\temp\tmpvyedhg\Release\users\dkim1\appdata\local\temp\tmpvyedhg\src.win32-2.7\fib1module.o:fib1module.c:(.text+0x79): undefined reference to `__imp__PyType_IsSubtype'
c:\users\dkim1\appdata\local\temp\tmpvyedhg\Release\users\dkim1\appdata\local\temp\tmpvyedhg\src.win32-2.7\fib1module.o:fib1module.c:(.text+0x93): undefined reference to `__imp__PyErr_Occurred'
... (Thousands of "undefined reference to" errors I didn't put it here) ...
collect2.exe: error: ld returned 1 exit statuserror: Command "D:\Anaconda2\envs\arc103\Scripts\gfortran.bat -Wall -Wall -shared c:\users\dkim1\appdata\local\temp\tmpvyedhg\Release\users\dkim1\appdata\local\temp\tmpvyedhg\src.win32-2.7\fib1module.o
c:\users\dkim1\appdata\local\temp\tmpvyedhg\Release\users\dkim1\appdata\local\temp\tmpvyedhg\src.win32-2.7\fortranobject.o
c:\users\dkim1\appdata\local\temp\tmpvyedhg\Release\fib1.o -Ld:\anaconda2\envs\arc103\mingw\lib\gcc\i686-w64-mingw32\4.7.0 -LD:\Anaconda2\envs\arc103\libs
-LD:\Anaconda2\envs\arc103\PCbuild -lpython27 -lgfortran -o .\fib1.pyd" failed with exit status 1
抱歉这个烂摊子。我花了差不多几个月的时间来找到解决办法,但这对我来说太难了,而且一切都无济于事。如果你能帮助我,我们将非常感激。感谢。
答案 0 :(得分:0)
由于这是几个月前,我不确定这些提示是否仍然有用,但我发现在Win 10上构建Fortran to Python模块时,只编译32位工作,并且您需要使用签名文件,即符合以下内容的内容:
f2py.py -c cuncsd.pyf cuncsd.f
我没有使用i686-w64-mingw32工具链,而是使用了直的mingw32工具(以减少我意外地以64位结束的风险)。
我还发现你需要安装一个特殊的Visual Studio for Python实例,如下所述: Microsoft Visual C++ Compiler for Python 3.4
如果你使用的是Python 2.7,那么这个VSC版本应该可以解决这个问题,目前只剩下较新的版本(3.5,3.6)。
这里的参考是我最终使用的控制台上的完整f2py调用(执行PATH上既没有python也没有f2py):
python C:\Python34\Scripts\f2py.py -c cuncsd.pyf --opt="-frecursive -fmax-stack-var-size=66560" cuncsd.f -llapack -lrefblas -ltmglib
这个特殊模块依赖于我之前编译的32位LAPCK共享库,我们发现它甚至适用于XP系统。
我后来回去尝试将其编译为64位,但最终放弃了,当时我总是遇到ld错误。我认为,对于Windows 10来说,使用嵌入式Ubuntu来执行和扩展Python会更容易。
(请参阅How to enable Bash in Windows 10 developer preview?和Getting PyCharm to recognize python on the windows linux subsystem (bash on windows))