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@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@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@common-lisp.net http://common-lisp.net/cgi-bin/mailman/listinfo/cffi-devel