[Rcpp-devel] linking external libraries in a package
Dirk Eddelbuettel
edd at debian.org
Wed Jan 1 21:33:24 CET 2014
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
More information about the Rcpp-devel
mailing list