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

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


Does anyone know how to get this email sent to whereever it's supposed to be
sent?


On 4/20/11 10:33 AM, "Dirk Eddelbuettel" <edd at debian.org> wrote:

> 
> On 20 April 2011 at 10:20, Sean Robert McGuffee wrote:
> | 
> | 
> | 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?
> 
> You don't. As I said, 'R CMD INSTALL' et all do that.
> 
> Download an existing package with source, install it.  Study its sources,
> study the 'Writing R Extensions' manual.  Ask on r-devel.
> 
> Basic R questions are off-topic here.
>  
> | >> 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
> 
> Again, I like working from an existing, working package. As I said, there are
> almost 1000 to pick from.
> 
> Please direct follow-ups that have no bearing on Rcpp to r-devel.
> 
> Dirk
> 
> | 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!
> | 
> | 
> | _______________________________________________
> | 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




More information about the Rcpp-devel mailing list