Re: [f2py] Compiling/linking the Fortran source files manually
Ben Forbes <[email protected]> Tue, 26 Apr 2011 15:18:37 +1000
| Newsgroups | gmane.comp.python.f2py.user |
|---|---|
| Message-ID | <[email protected]> |
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 <[email protected]> wrote: > On Mon, Apr 25, 2011 at 5:34 PM, Ben Forbes <[email protected]> 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