Re: [f2py] Compiling/linking the Fortran source files manually
Ben Forbes <[email protected]> Tue, 26 Apr 2011 17:49:26 +1000
| Newsgroups | gmane.comp.python.f2py.user |
|---|---|
| Message-ID | <[email protected]> |
Modifying PATH makes it find the 64-bit compiler now. However, I'm still getting the same issues with the compiler and linker flags: ifort: command line warning #10006: ignoring unknown option '/shared' ifort: command line warning #10006: ignoring unknown option '/shared' 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 '/Of' ifort: command line warning #10006: ignoring unknown option '/Oo' ifort: command line warning #10006: ignoring unknown option '/Oo' 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' ifort: command line warning #10148: option '-Oy' not supported On Tue, Apr 26, 2011 at 5:34 PM, Pearu Peterson <[email protected]> wrote: > > > On 04/26/2011 10:19 AM, Ben Forbes wrote: >> 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. > > I am not sure which numpy.distutils version you have (I am using the > one form git repo) and indeed the versions should match when I read > the code. So, try to fix the intel.py script so that it will > successfully find either intelem or intelvem. You can run the > intel.py script directly, just fix one line at the end of > the script to > > compiler = new_fcompiler(compiler='intelem') > > for instance. > > Another note: so you have both 32 and 64 bit versions of intel > compilers installed in the system. Perhaps numpy.distutils finds > 32-bit ifort program first in the PATH variable and hence > it never can try the 64-bit ifort. So, check the naming of > intel compiler programs and the PATH env. variable. > > Pearu > > >> 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 >>> >> >> >> > > _______________________________________________ > 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