[R] interfacing C++ using .Call

Thomas Lumley tlumley at u.washington.edu
Tue Feb 17 18:29:09 CET 2004

On Tue, 17 Feb 2004, Sundar Dorai-Raj wrote:

> Hi folks,
>    I apologise if this is in the documentation somewhere, but I can't
> seem to find it. I also did a search of CRAN without any success. I'm
> using R-1.8.1 (pre-compiled) on Windows 2000 with Rtools and mingw 2.0.0
> (which includes gcc/g++ 3.2).
> I'm trying to link some C++ code from another application to R using the
> .Call interface and am experiencing some problems. I was able to compile
> and link the example from Section 4.6 in R-exts.pdf without any
> difficulty. But if I take a more complicated example that uses SEXP I'm
> able to compile but not link. Here's an example:
> Adding extern "C" {} does not help the problem. Can anybody replicate
> this? Is there something I'm missing?

Did you put extern "C" {} around the #include as well?  Using
R/doc/manual/R-exts.c and the driver in R/doc/manual/R-exts.R
I don't have any problems if I rename R-exts.c to R-exts.cpp as long as
the extern "C" {} surrounds the headers as well as the code.

In my case (on OS X) the error when I don't do this comes at load time
rather than compile time, and it's clear that the problem is C++ name

Error in dyn.load(x, as.logical(local), as.logical(now)) :
        unable to load shared library "/Users/thomas/R-exts.so":
  dlcompat: dyld: /usr/local/lib/R/bin/R.bin Undefined symbols:

An unusual example of it being easier to debug a shared library problem
under Mac OS X ;)


More information about the R-help mailing list