2016-01-18 137 views
0

我想學習如何編譯使用f2py的python fortran代碼。我使用Python 2.7.10(通過Python(x,y))和Mingw32作爲我的編譯器。我試圖讓它在64位Windows 7中運行,但Python 2.7.10運行在32位。我爲我的系統的PATH文件添加了C:\MingW\bin\C:\Python27\的適當路徑。f2py與你好世界

當我試圖編譯一個簡單的hello.f「Hello,World!」程序,我得到以下錯誤:

C:\Users\Tim\Desktop>f2py -c -m hello hello.f 
running build 
running config_cc 
unifing config_cc, config, build_clib, build_ext, build commands --compiler options 
running config_fc 
unifing config_fc, config, build_clib, build_ext, build commands --fcompiler options 
running build_src 
build_src 
building extension "hello" sources 
f2py options: [] 
f2py:> c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7\hellomodule.c 
creating c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7 
Reading fortran codes... 
    Reading file 'hello.f' (format:fix,strict) 
Post-processing... 
    Block: hello 
      Block: hello 
Post-processing (stage 2)... 
Building modules... 
    Building module "hello"... 
    Wrote C/API module "hello" to file "c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7\hellomodule.c" 
    adding 'c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7\fortranobject.c' to sources. 
    adding 'c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7' to include_dirs. 
copying C:\Python27\lib\site-packages\numpy\f2py\src\fortranobject.c -> c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7 
copying C:\Python27\lib\site-packages\numpy\f2py\src\fortranobject.h -> c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7 
build_src: building npy-pkg config files 
running build_ext 
Cannot build msvcr library: "msvcr90d.dll" not found 
customize Mingw32CCompiler 
customize Mingw32CCompiler using build_ext 
customize GnuFCompiler 
Could not locate executable g77 
Could not locate executable f77 
customize IntelVisualFCompiler 
Could not locate executable ifort 
Could not locate executable ifl 
customize AbsoftFCompiler 
Could not locate executable f90 
customize CompaqVisualFCompiler 
Could not locate executable DF 
customize IntelItaniumVisualFCompiler 
Could not locate executable efl 
customize Gnu95FCompiler 
Found executable C:\MinGW\bin\gfortran.exe 
Found executable C:\MinGW\bin\gfortran.exe 
customize Gnu95FCompiler 
customize Gnu95FCompiler using build_ext 
building 'hello' extension 
compiling C sources 
C compiler: gcc -O2 -Wall -Wstrict-prototypes 

creating c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\Release 
creating c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\Release\users 
creating c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\Release\users\tim~1.rue 
creating c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\Release\users\tim~1.rue\appdata 
creating c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\Release\users\tim~1.rue\appdata\local 
creating c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\Release\users\tim~1.rue\appdata\local\temp 
creating c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\Release\users\tim~1.rue\appdata\local\temp\tmpriisfr 
creating c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\Release\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7 
compile options: '-DNPY_MINGW_USE_CUSTOM_MSVCR -D__MSVCRT_VERSION__=0x0900 -Ic:\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7 -IC:\Python27\lib\site-packages\numpy\core\include -IC:\Python27\include -IC:\Python27\PC -c' 
gcc -O2 -Wall -Wstrict-prototypes -DNPY_MINGW_USE_CUSTOM_MSVCR -D__MSVCRT_VERSION__=0x0900 -Ic:\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7 -IC:\Python27\lib\site-packages\numpy\core\include -IC:\Python27\include -IC:\Python27\PC -c c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7\hellomodule.c -o c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\Release\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7\hellomodule.o 
Found executable C:\MinGW\bin\gcc.exe 
gcc -O2 -Wall -Wstrict-prototypes -DNPY_MINGW_USE_CUSTOM_MSVCR -D__MSVCRT_VERSION__=0x0900 -Ic:\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7 -IC:\Python27\lib\site-packages\numpy\core\include -IC:\Python27\include -IC:\Python27\PC -c c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7\fortranobject.c -o c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\Release\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7\fortranobject.o 
compiling Fortran sources 
Fortran f77 compiler: C:\MinGW\bin\gfortran.exe -Wall -g -ffixed-form -fno-second-underscore -O3 -funroll-loops 
Fortran f90 compiler: C:\MinGW\bin\gfortran.exe -Wall -g -fno-second-underscore -O3 -funroll-loops 
Fortran fix compiler: C:\MinGW\bin\gfortran.exe -Wall -g -ffixed-form -fno-second-underscore -Wall -g -fno-second-underscore -O3 -funroll-loops 
compile options: '-Ic:\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7 -IC:\Python27\lib\site-packages\numpy\core\include -IC:\Python27\include -IC:\Python27\PC -c' 
gfortran.exe:f77: hello.f 
C:\MinGW\bin\gfortran.exe -Wall -g -Wall -g -shared c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\Release\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7\hellomodule.o c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\Release\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7\fortranobject.o c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\Release\hello.o -Lc:\mingw\lib\gcc\mingw32\4.8.1 -LC:\Python27\libs -LC:\Python27\PCbuild -lpython27 -lgfortran -o .\hello.pyd 
C:\Python27\libs/libpython27.a: error adding symbols: File format not recognized 
collect2.exe: error: ld returned 1 exit status 
error: Command "C:\MinGW\bin\gfortran.exe -Wall -g -Wall -g -shared c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\Release\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7\hellomodule.o c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\Release\users\tim~1.rue\appdata\local\temp\tmpriisfr\src.win32-2.7\fortranobject.o c:\users\tim~1.rue\appdata\local\temp\tmpriisfr\Release\hello.o -Lc:\mingw\lib\gcc\mingw32\4.8.1 -LC:\Python27\libs -LC:\Python27\PCbuild -lpython27 -lgfortran -o .\hello.pyd" failed with exit status 1 

有人可以幫我理清爲什麼這不是編譯和幫助我得到這個工作?

+0

看到這個問題:http://stackoverflow.com/questions/33984023/python-embedded-c-code-compilation-error –

回答

1

其實這似乎是a bug in Python 2.7.10,其中包含64位對象的32位libpython27.a。要解決它,要麼將python降級到2.7.9,要麼將其升級到2.7.11(或者你可以按照this問題的路線,但根據你的經驗,這可能會很痛苦)。