Re: [f2py] Compiling/linking the Fortran source files manually
Ben Forbes <[email protected]> Tue, 26 Apr 2011 19:29:44 +1000
| Newsgroups | gmane.comp.python.f2py.user |
|---|---|
| Message-ID | <[email protected]> |
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