From ripley at stats.ox.ac.uk  Fri Jun 15 07:45:09 2007
From: ripley at stats.ox.ac.uk (Prof Brian Ripley)
Date: Fri, 15 Jun 2007 06:45:09 +0100 (BST)
Subject: [Rd] LAPACK Headers
In-Reply-To: <20070615025342.GA21406@bjl>
References: <20070614214558.GA20567@bjl> <4671C0E0.7010200@cimr.cam.ac.uk>
	<20070615025342.GA21406@bjl>
Message-ID: <Pine.LNX.4.64.0706150639100.28253@gannet.stats.ox.ac.uk>

He wants "La_dgesv", which is not an LAPACK entry point at all, but a 
private part of R.  The header it is in is private and not installed.

There is no guarantee that it will remain visible to an R package, and the 
only safe thing to do is to copy the code.

On Thu, 14 Jun 2007, statmobile at gmail.com wrote:

> On Thu, Jun 14, 2007 at 11:27:44PM +0100, Hin-Tak Leung wrote:
>> Try this? (this is on 2.5.0, I don't use 2.4.x anymore)
>>
>> #include <R_ext/Lapack.h>
>>
>
> I tried this, but I still get the warning of implicit declaration of
> function.  It does compile though.
>
>> Have you actually tried grep dgesv $R_HOME/include/* $R_HOME/include/*/*
>> to see which file to include for dgesv ??
>
> Well, when I grep the R source files, I get:
>
> $ find . -name "*" -print | xargs grep -i 'La_dgesv'
> ./src/main/basedecl.h:SEXP La_dgesv(SEXP, SEXP, SEXP);
> ./src/main/lapack.c:SEXP La_dgesv(SEXP A, SEXP B, SEXP tol)
> ./src/main/lapack.c:SEXP La_dgesv(SEXP A, SEXP B, SEXP tol)
> ./src/main/registration.c:    CALLDEF(La_dgesv, 3),
> ./src/library/base/R/solve.R:     .Call("La_dgesv", a, b, tol, PACKAGE
> = "base")
> ./src/library/base/R/solve.R:     drop(.Call("La_dgesv", a,
> as.matrix(b), tol, PACKAGE = "base")))
> ./src/modules/lapack/Lapack.c:static SEXP modLa_dgesv(SEXP A, SEXP
> Bin, SEXP tolin)
> ./src/modules/lapack/Lapack.c:    tmp->dgesv = modLa_dgesv;
> ./src/include/Rmodules/Rlapack.h:typedef SEXP (*Rf_La_dgesv)(SEXP A,
> SEXP B, SEXP tol);
> ./src/include/Rmodules/Rlapack.h:    Rf_La_dgesv dgesv;
>
> So it looks like La_dgesv is declared in basedecl.h, but I don't see
> this file anywhere else on my machine.  Maybe I shouldn't be using
> this function in my package?
>
>
>
>>
>> HTL
>>
>> statmobile at gmail.com wrote:
>>> Hey Everyone,
>>>
>>> I'm running R 2.4.0 on Debian etch 4.0, and I'm trying to call some
>>> LAPACK functions from the C code in my package.  Actually, to be
>>> honest I'm not really having trouble using commands such as La_dgesv
>>> from within my C code, but I do get warning when compiling the package
>>> saying:
>>>
>>> ***.c: In function '***':
>>> ***.c:37: warning: implicit declaration of function 'La_dgesv'
>>> ***.c:37: warning: assignment makes pointer from integer without
>>> a cast
>>>
>>> I tried using:
>>>
>>> #include <Rmodules/Rlapack.h>
>>>
>>> but it won't compile the package at all with that included,
>>> complaining that
>>>
>>> ***.h:5:30: error: Rmodules/Rlapack.h: No such file or directory
>>>
>>> Can someone explain to me how I should include the headers to this
>>> AWESOME wrapper code to the LAPACK libraries?  Am I not following the
>>> proper protocol by using these La_* commands in my package source
>>> code?
>>>
>>> Note, I also have the following in Makevars
>>>
>>> PKG_LIBS = $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)
>>>
>>> TIA!
>>>
>>> I initially posted this question on the general list, but I didn't get
>>> any responses.
>>>
>>> ______________________________________________
>>> R-devel at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>
>

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595



[Rd] LAPACK Headers
Prof Brian Ripley