[Rcpp-devel] Question on 5.6 Interfacing C++ code

Sean Robert McGuffee sean.mcguffee at gmail.com
Wed Apr 20 16:20:55 CEST 2011



Hi, thanks!

>On 4/20/11 10:03 AM, "Steve Lianoglou" <mailinglist.honeypot at gmail.com> wrote:
> Hi,
> 
> On Wed, Apr 20, 2011 at 9:49 AM, Sean Robert McGuffee
> <sean.mcguffee at gmail.com> wrote:
>> Hi, I have a quick couple of questions about some of the documentation on
>> the web page:
>> http://cran.r-project.org/doc/manuals/R-exts.html#Linking-GUIs-and-other-fron
>> t_002dends-to-R
>> under the heading:
>> 5.6 Interfacing C++ code
>> 
>> Question 1:
>> If I¹m at a terminal, I can type the instructions they suggest:
>> R CMD SHLIB X.cc X_main.cc
>> If I wanted a package to do this, how would I tell the package to do that
>> same thing?
> 
> Just to make sure we're all on the same page, you want an R package to
> compile some source code into a shared library/dll from inside R?
> 
> Not sure if there's a "baked in" way for that to happen, but maybe you
> can invoke `R CMD WHATEVER` from inside R using the `system` function:
> 
> R> ?system
> 

ok, so where in the package would I put the system call in the package to
have it run when installing the package?

>> Would I use the same command and just include it in a file somewhere in the
>> package?
>> If so, which file?
> 
> Hmm ... I'm curious what you're trying to do, exactly?

I'm trying to figure out how take commands such as " R CMD SHLIB X.cc
X_main.cc" followed by "dyn.load(paste("X", .Platform$dynlib.ext, sep =
""))," which are commands I can get to work for myself as a human
interactively, and put the commands into a package to be automatically run
when installing the package. I mean, it's great if I can compile a c++ file
and then use it inside R, but I'm only doing that so I can let other people
do that via a package. As much as I read this documentation, I keep missing
the connections between the different sections. This is a section I am
loving because it works very well. Thus, I want to figure out how to take
the baby steps I'm doing and combine them into a package. Specifically, I
want to take these two commands and insert them into a package so that these
commands will compile my code and make a dynamic ".so" file where R can
access its functions when others install my package.

> 
>> Question 2:
>> dyn.load(paste("X", .Platform$dynlib.ext, sep = ""))
>> 
>> Where does .Platform$dynlib.ext come from?
>> What does it mean?
>> What do it¹s components .Platform and $dynlib and .ext mean?
> 
> .Platform is lust a normal list -- it is defined internally (I guess).
> You can access "named" elements of a list with `$`.
> 
> .Platform$dynlyb (or .Platform[['dynlib']]) tells you the extension
> your particular system uses for shared libraries:
> 
> R> .Platform
> $OS.type
> [1] "unix"
> 
> $file.sep
> [1] "/"
> 
> $dynlib.ext
> [1] ".so"
> 
> $GUI
> [1] "X11"
> 
> $endian
> [1] "little"
> 
> $pkgType
> [1] "mac.binary.leopard"
> 
> $path.sep
> [1] ":"
> 
> $r_arch
> [1] "x86_64"
> 
> See ?.Platform for more help.

Ah, thanks, that clarifies exactly what .Platform$dynlib.ext is, it's ".so"
on my system. 

This, the dyn.load(paste("X", .Platform$dynlib.ext, sep = "")) is equivalent
to the command dyn.load("X.so) which now makes sense in that context! 




More information about the Rcpp-devel mailing list