[f2py] Compiling/linking the Fortran source files manually

Ben Forbes bdforbes at gmail.com
Tue Apr 26 06:09:39 EEST 2011


On Mon, Apr 25, 2011 at 5:34 PM, Ben Forbes <bdforbes at gmail.com> wrote:
> I'm having trouble getting f2py (from Enthought 7.0.2 64-bit) to play
> nicely with my compiler (Intel Visual Fortran 11 build 067). I am
> running Windows 7 64-bit. My source file is just a hello world
> subroutine, and I am running "f2py -c helloworld.f90".

I've made some progress on this:
- I use "f2py helloworld.f90" to get helloworldmodule.c.
- I copy over fortranobject.c and fortranobject.h.
- I manually compile the C files using mingw 64-bit to get .o files.
- I manually compile helloworld.f90 to .obj.
- Now I to use lib.exe (from Visual C) to link everything together.
- I rename the resultant .lib to helloworld.pyd.

The problem I'm currently getting is that when I try to "import
helloworld", it tells me:

ImportError: DLL load failed: %1 is not a valid Win32 application.

It appears I need a DLL with an entry point. How would I achieve this?

Here are my commands for reference:

C:\MinGW_64\bin\x86_64-w64-mingw32-gcc.exe -g -DDEBUG -DMS_WIN64
-mno-cygwin -O0 -Wall -Wstrict-prototypes
-IC:\Python27\lib\site-packages\numpy\core\include
-IC:\Python27\include -IC:\Python27\PC -c fortranobject.c -o
fortranobject.o

C:\MinGW_64\bin\x86_64-w64-mingw32-gcc.exe -g -DDEBUG -DMS_WIN64
-mno-cygwin -O0 -Wall -Wstrict-prototypes
-IC:\Python27\lib\site-packages\numpy\core\include
-IC:\Python27\include -IC:\Python27\PC -c helloworldmodule.c -o
helloworldmodule.o

"C:\Program Files (x86)\Intel\Compiler\11.1\067\bin\intel64\ifort.exe"
/MT /c helloworld.f90

"C:\Program Files (x86)\Microsoft Visual Studio
9.0\VC\Bin\x86_amd64\lib.exe" fortranobject.o helloworldmodule.o
helloworld.obj c:\Python27\libs\python27.lib /LIBPATH:"C:\Program
Files (x86)\Intel\Compiler\11.1\067\lib\ia32" /LIBPATH:"C:\Program
Files (x86)\Microsoft Visual Studio 9.0\VC\Lib" /LIBPATH:"C:\Program
Files (x86)\Microsoft Visual Studio 9.0\VC\PlatformSDK\Lib"



> The first
> apparent errors are when ifort is called:
>
> ifort: command line warning #10006: ignoring unknown option '/shared'
> ifort: command line warning #10006: ignoring unknown option '/shared'
> ifort: command line warning #10161: unrecognized source type
> 'c:\users\bdforbes\appdata\local\temp\tmpu
> pntzq\Release\users\bdforbes\appdata\local\temp\tmpupntzq\src.win-amd64-2.7\untitledmodule.o';
> object f
> ile assumed
> ifort: command line warning #10161: unrecognized source type
> 'c:\users\bdforbes\appdata\local\temp\tmpu
> pntzq\Release\users\bdforbes\appdata\local\temp\tmpupntzq\src.win-amd64-2.7\fortranobject.o';
> object fi
> le assumed
> ifort: command line warning #10161: unrecognized source type
> 'c:\users\bdforbes\appdata\local\temp\tmpu
> pntzq\Release\helloworld.o'; object file assumed
> ifort: command line warning #10006: ignoring unknown option '/LC:\Python27\libs'
> ifort: command line warning #10006: ignoring unknown option
> '/LC:\Python27\PCbuild\amd64'
> ifort: command line warning #10006: ignoring unknown option '/lpython27'
> ifort: command line warning #10006: ignoring unknown option '/OU'
> ifort: command line warning #10006: ignoring unknown option '/OT'
> ifort: command line warning #10155: ignoring option '/optimize';
> argument required
> ifort: command line warning #10006: ignoring unknown option '/O.'
> ifort: command line warning #10006: ignoring unknown option '/O\'
> ifort: command line warning #10006: ignoring unknown option '/Ou'
> ifort: command line warning #10006: ignoring unknown option '/On'
> ifort: command line warning #10006: ignoring unknown option '/Ol'
> ifort: command line warning #10006: ignoring unknown option '/Oe'
> ifort: command line warning #10006: ignoring unknown option '/O.'
> ifort: command line remark #10010: option '/Op' is deprecated and will
> be removed in a future release.
> See '/help deprecated'
>
> Is it possible for me to provide f2py with a pre-compiled object file
> or static library? I know how to produce .obj and .lib, not sure how
> to turn those into .o or .a or .so.
>
> Thanks for your help.
>
>
> --
> Benjamin D. Forbes
> School of Physics
> The University of Melbourne
> Parkville, VIC 3010, Australia
>



-- 
Benjamin D. Forbes
School of Physics
The University of Melbourne
Parkville, VIC 3010, Australia



More information about the f2py-users mailing list