[f2py] Compiling/linking the Fortran source files manually
Ben Forbes
bdforbes at gmail.com
Tue Apr 26 08:18:37 EEST 2011
Okay I think I've narrowed it down even further. I'm linking it as a
.dll, and I created a dummy entry point in the fortran source file.
When I import it, I can an error:
ImportError: dynamic module does not define init function (inithelloworld)
I pre-processed helloworldmodule.c and I can see inithelloworld there,
so I assume the problem is that VC link.exe is mangling the names.
This seems like a big problem. I could switch to ld but MinGW ld seems
to only support ELF, whereas I'm using PE or COFF (not sure which).
Any suggestions?
On Tue, Apr 26, 2011 at 1:09 PM, Ben Forbes <bdforbes at gmail.com> wrote:
> 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
>
--
Benjamin D. Forbes
School of Physics
The University of Melbourne
Parkville, VIC 3010, Australia
More information about the f2py-users
mailing list