[cffi-devel] CFFI and FORTRAN CHARACTER*(*)

Juan Jose Garcia-Ripoll juanjose.garciaripoll at googlemail.com
Mon Jun 7 19:35:34 UTC 2010


We were talking about Fortran. I do not know about Fortran90. Lapack is
definitely Fortran77 and is compiled as such. In any case I would recommend
linking against cblas and clapack, the C bindings that are also available
for the most useful libraries -- atlas, Intel's, IBM's. There is no
ambiguity there.

Juanjo

On Mon, Jun 7, 2010 at 8:38 PM, Martin Simmons <martin at lispworks.com> wrote:

> >>>>> On Mon, 7 Jun 2010 11:12:47 -0600, Mark Hoemmen said:
> >
> > On Mon, Jun 7, 2010 at 10:56, Martin Simmons <martin at lispworks.com>
> wrote:
> > >>>>>> On Sat, 5 Jun 2010 16:12:58 +0200, Juan Jose Garcia-Ripoll said:
> > >>
> > >> CHARACTERs in Fortran are just pointers of type char*, just like in C,
> and
> > >> just like any other fortran array. There is no terminating null and
> the
> > >> fortran functions get the length either from some argument or because
> they
> > >> assume a given size (for instance in Lapack it is a one-character
> string
> > >> what the function expects)
> > >
> > > Are you sure about?  I think the lengths are passed as implicit
> arguments at
> > > the end of the argumwnt list.
> >
> > Not on any Fortran compilers I've seen, at least when dealing with
> > LAPACK.  Replacing CHARACTER*(*) with "char* const" when calling
> > LAPACK routines that take CHARACTER*(*) arguments works perfectly fine
> > with all the Fortran compilers I've encountered (e.g., gfortran, Intel
> > Fortran compiler, IBM's xlf).
>
> Maybe LAPACK is compiled with options that make this work (or nothing looks
> at
> the length arguments), but when I compile the code below with gfortran it
> clearly passes the string lengths 4 and 3 as extra arguments.
>
>      INTEGER FUNCTION ILAENV( NAME , NN )
>      CHARACTER*( * )    NAME, NN
>      ILAENV = ICHAR( NAME( 1: 1 ) )
>      RETURN
>      END
>
>      INTEGER FUNCTION ZZZ( )
>      ZZZ = ILAENV("fooo", "bar")
>      RETURN
>      END
>
>
>        movl    $3, %ecx
>        movl    $4, %edx
>        movl    $.LC0, %esi
>        movl    $.LC1, %edi
>        call    ilaenv_
>
>
> --
> Martin Simmons
> LispWorks Ltd
> http://www.lispworks.com/
>
> _______________________________________________
> cffi-devel mailing list
> cffi-devel at common-lisp.net
> http://common-lisp.net/cgi-bin/mailman/listinfo/cffi-devel
>



-- 
Instituto de Física Fundamental, CSIC
c/ Serrano, 113b, Madrid 28006 (Spain)
http://tream.dreamhosters.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/cffi-devel/attachments/20100607/2941d723/attachment.html>


More information about the cffi-devel mailing list