[Rcpp-devel] Including a compiled function with inline

Marie Auger-Methe marie.augermethe at gmail.com
Tue Jun 5 11:00:25 CEST 2012


Thank you! It works great!

Here is what I did:

src <- '
     using namespace Rcpp;
     double y = 9;
     NumericVector z(1);
     z[0] = 100.1;

     f1(y, z);
     z[0] = z[0] + 1;
     return z;
'

f2 <- cxxfunction(signature(),  body = src, plugin = "Rcpp", includes =  
"#include <C:/Users/Marie/Documents/R/fxwithinfxCompiled/f1.txt>")

This is my code file called f1.txt:
#ifndef _fxwithinfx_f1_H
#define _fxwithinfx_f1_H

#include <Rcpp.h>

extern "C" int f1(double y, SEXP z) ;

#endif

#include "f1.h"

int f1(double y, SEXP z){
   using namespace Rcpp;

   NumericVector zz(z);
   zz[0] = y + 1.5;
   return(0);
}

Marie

On 04/06/2012 5:36 PM, Douglas Bates wrote:
> On Mon, Jun 4, 2012 at 4:19 AM, Marie Auger-Methe
> <marie.augermethe at gmail.com>  wrote:
>> Hi list,
>> I am writing a Rcpp function (referred as f2). To be able to debug it, I am
>> currently using inline to write f2. f2 uses a function that I've wrote and
>> is now part of a package that I have made (referred as f1). f1 is an Rcpp
>> function that is not called within R but only called from Rcpp functions. I
>> was wondering how I could use this f1 function within f2 when using inline.
>>  From what I understand I should be able to use the argument includes from
>> cxxfunction. I think it is related to this thread:
>> http://thread.gmane.org/gmane.comp.lang.r.rcpp/2593/focus=2600
>> But I can't quite figure out.
> Unfortunately, it's complicated if you want to access the compiled
> code from another package.   There is a mechanism for another
> package's compiled C functions but it is somewhat unwieldy.  If you
> want to access another package's compiled C++ classes and methods and
> stand-alone functions you need to arrange for the compiled code to be
> in a known location and have this location on the path for the loader.
>   The Rcpp package does this but getting the details right on multiple
> platforms is tricky.
>
> Perhaps the easiest approach is to include not only the headers but
> all the C++ code in the file listed in the includes argument to
> cxxfunction.  It's a bit wasteful but at least it works. :-)
>
>> Here is a small example:
>>
>> library(inline)
>> library(fxwithinfx) # My package that contain f1
>>
>> src<- '
>>    using namespace Rcpp;
>>    double y = 9;
>>    NumericVector z(1);
>>
>>    f1(y, z);
>>    z[0] = z[0] + 1;
>>    return z;
>>    '
>> f2<- cxxfunction(signature(),  body = src, plugin = "Rcpp", includes =
>> "#include<fxwithinfx/f1.h>")
>>
>> # I get the following error:
>>
>> Error in compileCode(f, code, language = language, verbose = verbose) :
>>    Compilation ERROR, function(s)/method(s) not created!
>> file11741d6932c4.cpp:19:27: fatal error: fxwithinfx/f1.h: No such file or
>> directory
>> compilation terminated.
>> # I tried to change the reference to f1.h by changing the path, but whatever
>> path I give I still get an error. For example, if I use this instead:
>> f2<- cxxfunction(signature(),  body = src, plugin = "Rcpp",
>>                       includes = "#include
>> <C:/Users/Marie/Documents/R/fxwithinfx/src/f1.h>")
>> # I get the following error:
>>
>> Error in compileCode(f, code, language = language, verbose = verbose) :
>>    Compilation ERROR, function(s)/method(s) not created!
>> file11743a6031d8.o:file11743a6031d8.cpp:(.text+0x104): undefined reference
>> to `f1'
>> collect2: ld returned 1 exit status
>>
>> # I'm actually not sure whether I should refer the actual .h location or to
>> the location within my R libraries
>>
>> # Here are the header and  src codes for the f1
>>
>> f1.h:
>>
>> #ifndef _fxwithinfx_f1_H
>> #define _fxwithinfx_f1_H
>>
>> #include<Rcpp.h>
>>
>> extern "C" int f1(double y, SEXP z) ;
>>
>> #endif
>>
>>
>> f1.cpp:
>>
>> #include "f1.h"
>>
>> int f1(double y, SEXP z){
>>    using namespace Rcpp;
>>
>>    NumericVector zz(z);
>>    zz[0] = y + 1.5;
>> }
>>
>>
>>
>> Any help will be appreciated!
>>
>> Marie
>>
>>
>> _______________________________________________
>> Rcpp-devel mailing list
>> Rcpp-devel at lists.r-forge.r-project.org
>> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel



More information about the Rcpp-devel mailing list