Re: [f2py] Compiling/linking the Fortran source files manually
Ben Forbes <[email protected]> Tue, 26 Apr 2011 19:43:48 +1000
| Newsgroups | gmane.comp.python.f2py.user |
|---|---|
| Message-ID | <[email protected]> |
It works straight away on Linux. On Tue, Apr 26, 2011 at 7:29 PM, Ben Forbes <[email protected]> wrote: > I might try it on Linux instead, at least then the toolchains won't be > so painful to use. At the moment I have MinGW, MSys, cygwin all > fighting each other, to the point where "make" has stopped working. My > only real goal is to wrap a series of MKL FFT calls and run it from > Python, which I can do from Linux anyway. > > Thanks for your help, I'll post again if I have trouble on Linux. > > On Tue, Apr 26, 2011 at 7:22 PM, Pearu Peterson > <[email protected]> wrote: >> >> >> On 04/26/2011 12:12 PM, Ben Forbes wrote: >>> I've already modified the preprocessor directives to get the Fortran >>> routines mangled properly. inithelloworld() is already compiled >>> correctly, based on the object dump above. The problem must be the >>> Visual Studio linker doing its own mangling. >> >>> I'm using Enthought, it might be tricky to change my numpy. >> >> Yes, it could. >> >> In past I have used the following approach (no guarantees though): >> 1) rename enthought python folder >> 2) install python and numpy from scratch, you might need to install >> mingw as well as IIRC then enthought keeps mingw in its own directory >> 3) try the example >> 4) remove the installed software from 2) >> 5) rename enthought python folder back >> >>> Could this be one of those situations where GNU + Windows = Fail? >> >> Perhaps, I don't know, may be it is GNU + Intel + Visual = Fail >> >> However note that I am quite ignorant regarding Windows dll issues. >> >> Pearu >> >>> On Tue, Apr 26, 2011 at 7:05 PM, Pearu Peterson >>> <[email protected]> wrote: >>>> >>>> >>>> On 04/26/2011 11:55 AM, Ben Forbes wrote: >>>>> No, I believe there is still a mangling issue. Python gives an error >>>>> along the lines of "can't find inithelloworld()". >>>> >>>> Can you establish what is the corresponding symbol name in the .pyd >>>> file? Perhaphs one or a combination of the following cpp options >>>> >>>> -DPREPEND_FORTRAN -DNO_APPEND_FORTRAN -DUPPERCASE_FORTRAN >>>> -DUNDERSCORE_G77 >>>> >>>> will help to fix the name mangling issue. These options ought to be >>>> used when compiling the foomodule.c file. >>>> >>>> Also, could you try the example with the latest numpy? >>>> >>>> Pearu >>>> >>>>> On Tue, Apr 26, 2011 at 6:50 PM, Pearu Peterson >>>>> <[email protected]> wrote: >>>>>> >>>>>> >>>>>> On 04/26/2011 11:33 AM, Ben Forbes wrote: >>>>>>> Okay I had copied intel.py in the same directory, so it was loading it twice. >>>>>>> >>>>>>> I changed >>>>>>> >>>>>>> 'linker_so' : ['<F90>', "-shared"], >>>>>>> >>>>>>> to >>>>>>> >>>>>>> 'linker_so' : ['<F90>', "/dll"], >>>>>>> >>>>>>> but it's still putting it in the wrong place: >>>>>>> >>>>>>> C:\Program Files (x86)\Intel\Compiler\11.1\067\bin\intel64\ifort.exe >>>>>>> /dll /dll foomodule.o fortranobject.o helloworld.o -LC:\Python27\libs >>>>>>> -LC:\Python27\PCbuild\amd64 -lpython27 /OUT:.\foo.pyd >>>>>>> >>>>>>> The /dll flag needs to be after /link, right at the end. Is this a >>>>>>> flaw with distutils? >>>>>> >>>>>> This is new to me. Can you give a reference for this condition? >>>>>> >>>>>> Note that there are two '/dll' in row, just in case it matters.. >>>>>> >>>>>> I don't see any '/link' option in the above command. >>>>>> >>>>>> Finally, when you execute the command above with the right order >>>>>> of all options, will foo.pyd be OK? Can you import it and call it from >>>>>> Python? >>>>>> >>>>>> Pearu >>>>>> >>>>>>> >>>>>>> On Tue, Apr 26, 2011 at 6:26 PM, Ben Forbes<[email protected]> wrote: >>>>>>>> I'm attempting to implement that, but there's suddenly another problem: >>>>>>>> >>>>>>>> C:\Users\bdforbes\pyfor\simple_f2py>f2py -c -m foo helloworld.f90 >>>>>>>> --fcompiler=intelvem >>>>>>>> Forcing DISTUTILS_USE_SDK=1 >>>>>>>> Traceback (most recent call last): >>>>>>>> File "C:\Python27\Scripts\f2py-script.py", line 24, in<module> >>>>>>>> main() >>>>>>>> File "C:\Python27\lib\site-packages\numpy\f2py\f2py2e.py", line 561, in main >>>>>>>> run_compile() >>>>>>>> File "C:\Python27\lib\site-packages\numpy\f2py\f2py2e.py", line 447, >>>>>>>> in run_compile >>>>>>>> fcompiler.load_all_fcompiler_classes() >>>>>>>> File "C:\Python27\lib\site-packages\numpy\distutils\fcompiler\__init__.py", >>>>>>>> line 736, in load_all_fco >>>>>>>> mpiler_classes >>>>>>>> fcompiler_aliases[alias][1].__name__)) >>>>>>>> ValueError: alias 'ifort' defined for both IntelFCompiler and IntelFCompiler >>>>>>>> >>>>>>>> I can't remember what changed to make this happen. >>>>>>>> >>>>>>>> >>>>>>>> On Tue, Apr 26, 2011 at 5:58 PM, Pearu Peterson >>>>>>>> <[email protected]> wrote: >>>>>>>>> >>>>>>>>> >>>>>>>>> On 04/26/2011 10:49 AM, Ben Forbes wrote: >>>>>>>>>> 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 >>>>>>>>> >>>>>>>>> They are all warnings and therefore can be ignored... except >>>>>>>>> that '/shared' and '/lpython27' options should be fixed. >>>>>>>>> Consult the compiler help to find out how to properly >>>>>>>>> specify these options and modify intel.py accordingly. >>>>>>>>> >>>>>>>>> HTH, >>>>>>>>> Pearu >>>>>>>>> >>>>>>>>> _______________________________________________ >>>>>>>>> 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 >>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> 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 > -- Benjamin D. Forbes School of Physics The University of Melbourne Parkville, VIC 3010, Australia