[Rcpp-devel] Rcpp upgrading legacy code linking error

Dirk Eddelbuettel edd at debian.org
Mon Mar 14 13:18:45 CET 2011


On 14 March 2011 at 10:29, Dahir Alihassan wrote:
| Hi Doug,
| 
| For the benefit of everyone, I will update this with my findings so far.
| The "-lR" compile flag mentioned by Doug below links to "libR.so" which is
| a shared/dynamic library when you compile R from source. The issue is that
| I am on Windows and so I understrand the equivalent is R.dll. However,
| this needs to be converted to a .lib /.a file so that it can be statically
| linked to. I'm surprised that this hasn't been documented and I've seen
| quite a few people confused about this. Has anyone made any progress on
| this front or am I totally going down the wrong road? Thanks.

I fear it is the latter.  You simply seem to miss the fact that R has been
doing this for thousands of packages for over a decade ("R CMD INSTALL foo"
just works).  We all use this feature.

I recommend that you try to understand how packages (with C, C++, or Fortran
sources) are built. There are many to chose from at CRAN, including those
using Rcpp. The 'Writing Rcpp Extensions' manual has details, and there are
many tutorials on the web.

As for your porting efforts, I already once explained to you that you can

    either switch to using RcppClassic and use its header RcppClassic.h
    instead of Rcpp.h; this is explained in the RcppClassic vignette

    or port as you are attempting which should be fine too

You are free to use Code::Blocks or whatever editing environment you chose,
but in order to build R you have to use the steps R needs to build. 'R CMD
INSTALL foo' automates a lot of that, I would use it if I were you.

Dirk

| 
| Dahir.
| 
| 
| On Wed, March 9, 2011 16:57, Douglas Bates wrote:
| > On Wed, Mar 9, 2011 at 9:14 AM, Dahir Alihassan <da288 at cantab.net> wrote:
| >
| >> Hi,
| >>
| >>
| >> I am posting here upon Dirk's suggestion, as I understand this is well
| >> attended to and I'd be grateful for any help. I am taking over a project
| >>  which involves upgrading to the latest version of Rcpp and thus I have
| >> to upgrade all the old style API calls (which is compatible with the
| >> Classic
| >> version I believe). The compile works fine but the errors arise on
| >> linking against the resulting \inst\libs\RLinkage.dll.
| >>
| >> I have manged to convert a lot of the code (mainly using Rcpp::List to
| >> extract and pack incoming and outgoing function parameters but also a
| >> bit of exception handling) but I simply keep getting "undefined
| >> reference" errors on linking. The build log after compiling says
| >> "Linking console
| >> executable" and this is where it list undefined references in the
| >> *.o:*.cpp files to:
| >>
| >>
| >> 1.Rprintf or Rf_error and forward_exception_to_r.
| >> 2.R_NilValue
| >> 3.Rf_install
| >>
| >
| > Except for forward_exception_to_r those symbols are part of the R API.
| > Can you provide the output from the compilation of the package?  The
| > last line of the compilation should look like
| >
| > g++ -shared -o minqa.so altmov.o bigden.o biglag.o bobyqa.o bobyqb.o
| > lagmax.o minqa.o newuoa.o newuob.o prelim.o rescue.o trsapp.o trsbox.o
| > trstep.o uobyqa.o uobyqb.o update.o updatebobyqa.o
| > -L/home/bates/R/x86_64-pc-linux-gnu-library/2.12/Rcpp/lib -lRcpp
| > -Wl,-rpath,/home/bates/R/x86_64-pc-linux-gnu-library/2.12/Rcpp/lib
| > -lgfortran -lm -L/usr/lib64/R/lib -lR
| >
| >
| > and the important part is the -lR at the end.  That is where those symbols
| > (except for forward_exception_to_r) are defined.
| >
| >
| >> I do have #include <Rcpp.h> (there was a series of errors that were
| >> occuring because I had included iostream before Rcpp, which was strange).
| >> I've tried looking at the RCPP PDF but can't seem to figure it
| >> out. I also tried to ensure that R.dll is on my PATH (C:\Program
| >> Files\R\R-2.12.1\bin\x64). I am using Code::Blocks 10.05 IDE with
| >> RTools
| >> installed and Mingw64 referenced explicitly in the toolchain (and
| >> correctly Autodetected as the compiler). I'd be extremelt grateful for
| >> any heads up. Thanks!
| >>
| >>
| >>
| >>
| >> _______________________________________________
| >> 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
| >>
| >>
| >
| 
| _______________________________________________
| 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

-- 
Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com


More information about the Rcpp-devel mailing list