Re: [f2py] Compiling/linking the Fortran source files manually
Ben Forbes <[email protected]> Tue, 26 Apr 2011 17:19:58 +1000
| Newsgroups | gmane.comp.python.f2py.user |
|---|---|
| Message-ID | <[email protected]> |
The version match text is "EM64T-based|Intel\\(R\\) 64", and my compiler gives "Intel(R) Visual Fortran Intel(R) 64 Compiler Professional for applications running on Intel(R) 64, Version 11.1 Build 20100806 Package ID: w_cprof_p_11.1.067". So it should actually match both intelem and intelvem. On Tue, Apr 26, 2011 at 5:12 PM, Pearu Peterson <[email protected]> wrote: > > > On 04/26/2011 09:51 AM, Ben Forbes wrote: >> It finds the intelv compiler, but as before, it's not using >> appropriate compiler and linker flags. It's also finding the 32-bit >> compiler, which I think will be a problem when linking in with the >> 64-bit python27.lib. > > Do you have 64-bit intel compiler in your system? > If so, then the question is why the --help-fcompiler could not > detect it. Look at the numpy/distutils/fcompiler/intel.py > script in you Python installation tree and try to find > out why --fcompiler=intelem is not detected. First, check > the version_match text and compare with the version string > that the compiler emits. > > HTH, > Pearu > >> >> >> On Tue, Apr 26, 2011 at 4:47 PM, Pearu Peterson >> <[email protected]> wrote: >>> Ok, thanks for the info. >>> >>> So, the command that I would try is >>> >>> f2py -c -m foo helloworld.f90 --compiler=mingw32 --fcompiler=intelv >>> >>> HTH, >>> Pearu >>> >>> On 04/26/2011 09:39 AM, Ben Forbes wrote: >>>> IntelVisualFCompiler instance properties: >>>> archiver = ['C:\\Program Files >>>> (x86)\\Intel\\Compiler\\11.1\\067\\bin\\ia32\\ifort.exe', >>>> '/verbose', '/OUT:'] >>>> compile_switch = '/c ' >>>> compiler_f77 = ['C:\\Program Files >>>> (x86)\\Intel\\Compiler\\11.1\\067\\bin\\ia32\\ifort.exe', >>>> '-FI', '-w90', '-w95', '/F6000000', '/fpe:3', '/Qopenmp', >>>> '/w', '/I:C:\\Program Files >>>> (x86)\\VNI\\imsl\\fnl600\\Intel64\\include\\dll', >>>> '/nologo', '/O3', '/Qip', '/QaxM'] >>>> compiler_f90 = ['C:\\Program Files >>>> (x86)\\Intel\\Compiler\\11.1\\067\\bin\\ia32\\ifort.exe', >>>> '-FR', '/F6000000', '/fpe:3', '/Qopenmp', '/w', >>>> '/I:C:\\Program Files >>>> (x86)\\VNI\\imsl\\fnl600\\Intel64\\include\\dll', >>>> '/nologo', '/F6000000', '/fpe:3', '/Qopenmp', '/w', >>>> '/I:C:\\Program Files >>>> (x86)\\VNI\\imsl\\fnl600\\Intel64\\include\\dll', >>>> '/nologo', '/O3', '/Qip', '/QaxM'] >>>> compiler_fix = ['C:\\Program Files >>>> (x86)\\Intel\\Compiler\\11.1\\067\\bin\\ia32\\ifort.exe', >>>> '-FI', '-4L72', '-w', '/F6000000', '/fpe:3', '/Qopenmp', >>>> '/w', '/I:C:\\Program Files >>>> (x86)\\VNI\\imsl\\fnl600\\Intel64\\include\\dll', >>>> '/nologo', '/F6000000', '/fpe:3', '/Qopenmp', '/w', >>>> '/I:C:\\Program Files >>>> (x86)\\VNI\\imsl\\fnl600\\Intel64\\include\\dll', >>>> '/nologo', '/O3', '/Qip', '/QaxM'] >>>> libraries = [] >>>> library_dirs = [] >>>> linker_exe = None >>>> linker_so = ['C:\\Program Files >>>> (x86)\\Intel\\Compiler\\11.1\\067\\bin\\ia32\\ifort.exe', >>>> '-shared', '-shared'] >>>> object_switch = '/Fo' >>>> ranlib = None >>>> version = LooseVersion ('11.1') >>>> version_cmd = ['C:\\Program Files >>>> (x86)\\Intel\\Compiler\\11.1\\067\\bin\\ia32\\ifort.exe', >>>> '/FI', '/c', >>>> 'c:\\users\\bdforbes\\appdata\\local\\temp\\tmpanswqs\\ra9 >>>> py5.f', '/o', >>>> 'c:\\users\\bdforbes\\appdata\\local\\temp\\tmpanswqs\\ra9 >>>> py5.o'] >>>> Fortran compilers found: >>>> --fcompiler=intelv Intel Visual Fortran Compiler for 32-bit apps (11.1) >>>> Compilers available for this platform, but not found: >>>> --fcompiler=absoft Absoft Corp Fortran Compiler >>>> --fcompiler=compaqv DIGITAL or Compaq Visual Fortran Compiler >>>> --fcompiler=g95 G95 Fortran Compiler >>>> --fcompiler=gnu GNU Fortran 77 compiler >>>> --fcompiler=gnu95 GNU Fortran 95 compiler >>>> --fcompiler=intelem Intel Fortran Compiler for EM64T-based apps >>>> --fcompiler=intelev Intel Visual Fortran Compiler for Itanium apps >>>> --fcompiler=intelvem Intel Visual Fortran Compiler for 64-bit apps >>>> Compilers not available on this platform: >>>> --fcompiler=compaq Compaq Fortran Compiler >>>> --fcompiler=hpux HP Fortran 90 Compiler >>>> --fcompiler=ibm IBM XL Fortran Compiler >>>> --fcompiler=intel Intel Fortran Compiler for 32-bit apps >>>> --fcompiler=intele Intel Fortran Compiler for Itanium apps >>>> --fcompiler=lahey Lahey/Fujitsu Fortran 95 Compiler >>>> --fcompiler=mips MIPSpro Fortran Compiler >>>> --fcompiler=nag NAGWare Fortran 95 Compiler >>>> --fcompiler=none Fake Fortran compiler >>>> --fcompiler=pg Portland Group Fortran Compiler >>>> --fcompiler=sun Sun or Forte Fortran 95 Compiler >>>> --fcompiler=vast Pacific-Sierra Research Fortran 90 Compiler >>>> For compiler details, run 'config_fc --verbose' setup command. >>>> >>>> On Tue, Apr 26, 2011 at 4:36 PM, Pearu Peterson >>>> <[email protected]> wrote: >>>>> >>>>> >>>>> On 04/26/2011 09:31 AM, Ben Forbes wrote: >>>>>> When I try that I get an error: >>>>>> >>>>>> numpy.distutils.fcompiler.CompilerNotFound >>>>> >>>>> What is the output of the following command: >>>>> >>>>> f2py -c --help-fcompiler >>>>> >>>>> Pearu >>>>> >>>>>> On Tue, Apr 26, 2011 at 4:07 PM, Pearu Peterson >>>>>> <[email protected]> wrote: >>>>>>> >>>>>>> >>>>>>> On 04/26/2011 06:09 AM, Ben Forbes 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. >>>>>>> >>>>>>> Btw, have you tried >>>>>>> >>>>>>> f2py -c -m foo helloworld.f90 --compiler=mingw32 --fcompiler=intelem >>>>>>> >>>>>>> Pearu >>>>>>> >>>>>>>> - 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 >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> _______________________________________________ >>>>>>> f2py-users mailing list >>>>>>> f2py-users-Y4l6ocDipWCuvFJfX82//[email protected] >>>>>>> http://cens.ioc.ee/mailman/listinfo/f2py-users >>>>>>> >>>>>> >>>>>> >>>>>> >>>>> >>>>> _______________________________________________ >>>>> f2py-users mailing list >>>>> f2py-users-Y4l6ocDipWCuvFJfX82//[email protected] >>>>> http://cens.ioc.ee/mailman/listinfo/f2py-users >>>>> >>>> >>>> >>>> >>> >>> _______________________________________________ >>> f2py-users mailing list >>> f2py-users-Y4l6ocDipWCuvFJfX82//[email protected] >>> http://cens.ioc.ee/mailman/listinfo/f2py-users >>> >> >> >> > > _______________________________________________ > f2py-users mailing list > f2py-users-Y4l6ocDipWCuvFJfX82//[email protected] > http://cens.ioc.ee/mailman/listinfo/f2py-users > -- Benjamin D. Forbes School of Physics The University of Melbourne Parkville, VIC 3010, Australia