[R] DLLs adding in C++ code

Laurence Kell FM CEFAS L.T.Kell at cefas.co.uk
Wed Nov 13 11:47:45 CET 2002


I would like to utilise the power of R by adding my own software as a
package written in C++. As a first step I am trying 
to write a DLL with a simple function that can be called from R. The DLL
contains a C++ routine written and complied in Microsoft Visual C++ Ver 6.0
and is based upon the example in R-Exts

eg I am trying to create the following example function

SEXP out(SEXP x, SEXP y)
   {
   int i, j, nx, ny;
   double tmp;
   SEXP ans;

   nx = length(x); ny = length(y);
   PROTECT(ans = allocMatrix(REALSXP, nx, ny));
   for(i = 0; i < nx; i++) {
    tmp = REAL(x)[i];
    for(j = 0; j < ny; j++)
      REAL(ans)[i + nx*j] = tmp * REAL(y)[j];
   }
   UNPROTECT(1);
   return(ans);
 }

I have used tried to generating a lib file that imports the R functions
using the supplied file (from CRAN)

	lib /def:R.exp /out:Rdll.lib

and even used dumpbin and the suppiled R.dll to construct a DEF file by
hand. However, although I have previously 
sucessfully created DLL functions for SPlus I have been unable to do this
using the supplied R code and binaries. I get the Link time error saying
that the R functions can not be found.

e.g.

error LNK2001: unresolved external symbol "void __stdcall Rf_unprotect(int)"
(?Rf_unprotect@@YGXH at Z)
error LNK2001: unresolved external symbol _REAL at 4
error LNK2001: unresolved external symbol _Rf_protect at 4
error LNK2001: unresolved external symbol _Rf_allocMatrix at 12
error LNK2001: unresolved external symbol _Rf_length at 4

I suspect this is because of way in which the functions are exported is not
standardised between MS and GNU compilers.

I suppose that I can recompile all the R code in VC++ and then I would be
able to use my simple DLL but this would be a 
major exercise and then I couldn't make my own routines easily available
within R.

Has anybody encountered this problem and know of a solution.


Thanks in advance

Laurence Kell

CEFAS Lowestoft Laboratory
Pakefield Road
Lowestoft, NR33 0HT
UK
Tel 	+44 1502 52 42 57
Fax 	+44 1502 52 45 11
e-mail	l.t.kell at cefas.co.uk









-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._



More information about the R-help mailing list