[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