[Rcpp-devel] useDynLib
Sean Robert McGuffee
sean.mcguffee at gmail.com
Fri Apr 1 05:12:52 CEST 2011
Thanks for the info about modularity. I'll definitely be wikipedia'ing that.
Also, thanks for clarifying the package author thing--I literally was
imagining some sort of function that writes something related to packages.
In particular with useDynLib, what type of argument(s) go(es) in it?
For example, do I literally copy a file object into it somehow?
Do I have a variable that is a string in ascii format that only exists
inside of the NAMESPACE file?
Do I have a variable that is a string somehow encoded in an SEXP type of
object inside C++?
Do I simply list a path name to a library?
Do I use the format of a name as if I were linking against a library and
specify a path name somewhere else?
I think there are a lot of possibilities, and I don't know where to start.
For example, say I want to link against libpng14.
On the machine I'm sitting at, it's located at:
/usr/local/lib/libpng14.a
How would I use useDynLib in that case?
On 3/31/11 10:49 PM, "Davor Cubranic" <cubranic at stat.ubc.ca> wrote:
> On 31 March 2011 at 3:53 PM, Sean Robert McGuffee wrote:
>
>> This link has a lot of information in it, but I don't understand much
>> of it because it seems to be written for people who already
>> understand it.
>
> You make a very good point here, and I think it's largely true for most
> of R's documentation. But that's because it's a reference, not a
> tutorial, and succinctness is valued more than hand-holding. That's what
> man pages are, too, btw.
>
> I actually think R-exts should be even more like a reference, or (more
> likely) it should have a reference-like counterpart. Like you showed
> with "useDynLib", important functions are described conversationally,
> instead of formally and exhaustively, they way help pages do for user-
> facing functions.
>
>> Under section 1.6: For example, I'm having trouble figuring out the
>> meaning of the following terms and or phrases:
>>
>> name spaces, management system, package writer, top level package
>> directory, name space directives, imports, exports
> [...]
>
> I don't mean to be glib, but how do you expect to get anywhere with
> packages when you don't understand basic concepts behind modularity like
> exporting a function so it's callable outside a module? As a first
> resort, look it up on Wikipedia: the article on name spaces ought to
> clear up a few things at least.
>
> A good way to avoid frustration is to read the manual lazily, start your
> code small and build up. For instance, you probably don't know what the
> section 1.6.2 on S3 methods is going on about because you're not using
> S3 classes in your code. if that's the case, fine, you don't need to read
> how to deal with them in the package declarations.
>
> I grant you that some terms are needlessly obfuscated, though. For
> example, "package writer" could have been "package author" -- but,
> honestly, is that really that hard to figure out?
>
>> "There can be one or more useDynLib directives which allows shared
>> objects that need to be loaded to be specified in the NAMESPACE
>> file. The directive
>>
>> useDynLib(foo)"
>>
>> This also is followed by other inconsistent examples:
>>
>> "useDynLib(foo, myRoutine, myOtherRoutine)"
>>
>> "myDLL = useDynLib(foo, myRoutine_sym = myRoutine, myOtherRoutine)"
>
> I'm sorry, but after re-reading this section, i don't see any
> inconsistency. There are different ways of calling "useDynLib", but what
> they do is explained in the text. And, back to reading the manual
> lazily, only the first one is used in 99% of the time. I, for one, use
> Rcpp extensively, and never needed (or even known) anything other than
> the very first one form of useDynLib. (And, in all likelihood, might have
> just used whatever Rcpp.package.skeleton put into the NAMESPACE for me.)
>
>> Does anyone have any links to something more like an API of what
>> appears to be some type of function called useDynLib?
>> In particular, I'm looking to find out what arguments the method
>> useDynLib takes with descriptions of their types?
>
> I don't know of one, but can you describe what exactly you're trying to
> do? If all you need is allow the R code in your package to call into a
> dynamic library "mylib.so" that's distributed with the package, it is
> sufficient to have a declaration "useDynLib(mylib)". This will ensure that
> when the package is loaded into the session, the dynamic library will
> also be loaded and ready for calling into with ".Call" and related
> functions.
More information about the Rcpp-devel
mailing list