Skip to content

Makevars

2 messages · Hadassa Brunschwig, Dirk Eddelbuettel

#
Hi

I have sent a previous email "Error in dyn.load()" for which, shame on
me, I later found a partial answer.
I have been trying to look into what I exactly need to include into
Makevars and where
it needs to be located and have not found a satisfying answer yet.
Maybe the following questions
are helpful for other people as well.

Again, I am trying to include a C function tools.c into a main.c file
which needs to be run via R.
I include the header file via #include tools.h .
What I understood is that I need another file which specifically links
the header file
with the tools.c files (or .o file?). My questions are thus:

1. Can I just create a file Makevars with the variable
PKG_LIBS=-L/directory_of_tools -l/tools?
2. Does this file need to be located in the same directory as main.c?
3. When I then run the command R CMD SHLIB it does not make use of
Makevars. So what do I need to add?
4. Does tools.c need to be a shared object as well?

Thanks a lot!

Hadassa
#
Hadassa,
On 11 January 2009 at 15:29, Hadassa Brunschwig wrote:
| Again, I am trying to include a C function tools.c into a main.c file
| which needs to be run via R.
| I include the header file via #include tools.h .
| What I understood is that I need another file which specifically links
| the header file
| with the tools.c files (or .o file?). My questions are thus:
| 
| 1. Can I just create a file Makevars with the variable
| PKG_LIBS=-L/directory_of_tools -l/tools?

Yes...

| 2. Does this file need to be located in the same directory as main.c?

Yes...

| 3. When I then run the command R CMD SHLIB it does not make use of
| Makevars. So what do I need to add?

... but Makevars is for R package building. See the 'R Extensions' manual for
documentation, and literally hundreds of packages on CRAN for live examples
to look at _in source_ on how to link C code to R code.

| 4. Does tools.c need to be a shared object as well?

tools.c is source code, tools.o would be object code. If you want to
dynamically load it, then it needs to be a shared object too.

Worked examples are also in my 'introduction to high-performance computing
with R' slides from August and December.  It covers added compiled code to R
on a few slides with worked examples using the inline and Rcpp packages.

Dirk