Re: R-beta: linking c++ functions

Kung-Sik Chan (kchan@stat.uiowa.edu)
Tue, 16 Sep 1997 09:36:29 -0700


Date: Tue, 16 Sep 1997 09:36:29 -0700
From: Kung-Sik Chan <kchan@stat.uiowa.edu>
To: Ross Ihaka <ihaka@stat.auckland.ac.nz>
Subject: Re: R-beta: linking c++ functions

Ross, 

A few days ago, I posted a question on how to link C++ functions
to R. I have now solved the problem, with my C++ function using
the newmat library now successfully called from R. The tricks are:
(1) use g++ to do the linking,
(2) modify the C++ functions, only those that you need to call from R,
so that they are callable by C codes.
The scond step is rather simple. Suppose that we want to call 
void f(int *i, char *c, double *x) 
from R.  
In the file containing f, add the line
extern "C" void f(int *i, char *c, double *x);
before the definition of f. This statement tells the compiler that
the external information sent to the linker should use C calling
conventions and name mangling. I learn this trick from Marshall Cline's
C++ faq
http://www.cerfnet.com/~mpcline/C++-FAQs-Lite/
under the item of how to mix C and C++.

The Makefile file in the src directory of my chaos library is as
follows:

..cc.o:
        g++ -c -fPIC -I/usr/include/newmat -I/usr/include/nric $<
LIBNAME=chaos
LD=g++

OBJS=   lyapunov.o

chaos.so:       $(OBJS)
        $(LD) $(SHLIBLDFLAGS) -o $(LIBNAME).so $(OBJS)  \
        -lnewmat -lm

clean:
        @rm -f *.o *.so

realclean:
        @rm -f Makefile *.o *.so       


Kung-Sik
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
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@stat.math.ethz.ch
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=