On 26 September 2013 at 21:13, Ron Goldman wrote: | I am attempting to bring R-3.0.2 functionality into a project with a very | large C++ codebase. The existing codebase already has a LENGTH function | defined. R also defines a LENGTH function. | | I first compiled R as a shared library and linked it into this existing | codebase, along with RInside. When I run a parseEvalQ with a linear model | command it will stack dump. Looking at the backtrace, what is happening is | that line 51 of lm.c is executing: | | if(n) ny = LENGTH(y)/n; /* n x ny, or a vector */ | | However, the LENGTH call is getting routed into our internal codebase. | This causes a stack dump. | | I then tried compiling R as a static library. After that I couldn't even | compile my existing code because it flags the issue right off the bat: | | ... error: declaration of C function 'int LENGTH(const ... *)' conflicts | with | ... /r/lib64/R/include/Rinternals.h:435: error: previous declaration 'int | LENGTH(SEXPREC*)' here | | It is not possible to remove/rename the LENGTH function from the existing | codebase. Any help would be appreciated in resolving this.
This got discussed a number of times over the years over on the rcpp-devel list. The common fixes are i) make sure you define R_NO_REMAP (as our headers do). The Fine Manual says: This remapping can cause problems(1), and can be eliminated by defining `R_NO_REMAP' and prepending `Rf_' to _all_ the function names used from `Rinternals.h' and `R_ext/Error.h'. ii) reordering of headers may help In sum, and quoting from RcppCommon.h // include R headers, but set R_NO_REMAP and access everything via Rf_ prefixes #define R_NO_REMAP #include <R.h> Hth, Dirk -- Dirk Eddelbuettel | e...@debian.org | http://dirk.eddelbuettel.com ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel