[Rcpp-devel] linking external libraries in a package

baptiste auguie baptiste.auguie at gmail.com
Thu Jan 2 15:51:29 CET 2014


Hi,

Dirk was right, unsurprisingly, all it took was to dump the files in src/
and R takes care of everything during package building (I initially had
issues with the PATH for my C compiler, which led me to the wrong
conclusion that things weren't so simple). All is magically working now :)

Thanks,

baptiste


On 1 January 2014 17:33, Dirk Eddelbuettel <edd at debian.org> wrote:

>
> On 1 January 2014 at 17:30, baptiste auguie wrote:
> | Hi list, and happy new year,
>
> Thanks, and Happy New Year from here too!
>
> | The command I'm using to create an executable is
> |
> | g++ -DHCUBATURE -o minimal hcubature.c minimal.c -lm -I
> /usr/local/include -O2
> |  -larmadillo -framework Accelerate
> |
> | where hcubature.c and associated header files come from cubature (
> http://
> | ab-initio.mit.edu/wiki/index.php/Cubature ).
>
> Summary: No external depends. No extra headers. No extra libraries.
>
> (Beyond the Accelerate framework which is OS X specific. I do not know if R
> would add this automatically.  If it needs manual intervention, you can
> handle this with src/Makevars alone. But that is a different question.)
>
> | The last piece I'm missing is how to compile such source files in a
> package
> | with the correct flags; my understanding is that most of these flags can
> be
> | taken care of with a suitable Makevars file. I currently have the
> following,
> |
> | PKG_LIBS = $(shell $(R_HOME)/bin/Rscript -e "Rcpp:::LdFlags()" )
> $(LAPACK_LIBS)
> | $(BLAS_LIBS) $(FLIBS)
> |
> | but I don't see how to link hcubature.c together with another source
> file. Do I
> | need a complete Makefile to specify this sort of command? I have zero
> | experience in these matters of compilation, I'd appreciate some guidance
> or
> | simple examples to follow.
>
> Just drop it into src/ and you're done.
>
> There are 5000+ packages on CRAN, and a "large enough" percentage with
> compiled code, and a "still large enough percentage" amonth those which
> includes external packages. Just look what others are doing -- eg packages
> such as RSQLite include the entire SQLite project (plain C, no external
> depends).
>
> More complicated setups exists too where you first descend into
> subdirectories of src/ and build entire libraries first. IIRC the Matrix
> package does -- but you don't have to.  One of the earlier Rcpp "clients"
> which I helped with a package reorginisation was phylobase, and there we
> did
> just that: copy all the external depends into src/ and have Makevars take
> care of it. Which avoids the convoluted need for library building under
> different OSs and ARCHs.  As I said: drop into src/ and you're done.
>
> R actually provides a pretty rich build system. If anything, it is a tad
> underdocumented.  But lists such as this one, or expert such as Simon, can
> set you straight.
>
> Let me know if you need more help.  I could fork your repo if you're lost.
>
> Cheers,  Dirk
>
> --
> Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20140102/ec449cbf/attachment.html>


More information about the Rcpp-devel mailing list