[R] Repeated use of dyn.load().

Rui Barradas ruipbarradas at sapo.pt
Thu Mar 1 21:35:44 CET 2018



On 3/1/2018 6:44 PM, Eric Berger wrote:
> Good question Rolf.
> Rui, thanks for pointing out dyn.unload.
> When I started using Rcpp a couple of years ago I got burned by stale 
> .so enough times that I adopted a policy of recompile-then-start new R 
> session.
> My workflow does not include Rolf's "brazillion" repeats, so the 
> overhead of this approach has not been too painful.
> The documentation for dyn.unload (via ?dyn.unload) includes the 
> following statement:
> "The function dyn.unload unlinks the DLL. Note that unloading a DLL and 
> then re-loading a DLL of the same name may or may not work: on Solaris 
> it uses the first version loaded."

Yes, I had noticed that sentence. But I have never used Solaris, and in 
Windows it works, to unload and then reload the dll loads the last one.

Also, in order to have code that works in other OS's I use two functions 
that are independent of the shared library extension used by the OS, 
'dll' or 'so'.

dynLoad <- function(dynlib){
     dynlib <- paste(dynlib, .Platform$dynlib.ext, sep = "")

dynUnload <- function(dynlib){
     dynlib <- paste(dynlib, .Platform$dynlib.ext, sep = "")

These have saved me lots and lots of typing along the years. (Note that 
they still call paste/sep = "")

Hope this helps,

Rui Barradas

> Eric
> On Thu, Mar 1, 2018 at 2:21 PM, Rui Barradas <ruipbarradas at sapo.pt 
> <mailto:ruipbarradas at sapo.pt>> wrote:
>     Hello,
>     In such cases, with C code, I call dyn.unload before loading the
>     modified shared lib again.
>     I don't know if this changed recently, but it used to be needed or
>     else R wouldn't load the new lib. When I call dyn.unload followed by
>     dyn.load I never had problems.
>     (Or the other way around, call dyn.unload before modifying the C code.)
>     Hope this helps,
>     Rui Barradas
>     On 3/1/2018 8:52 AM, Rolf Turner wrote:
>         I am working with a function "foo" that explicitly dynamically
>         loads a shared object library or "DLL", doing something like
>         dyn.load("bar.so").   This is a debugging exercise so I make
>         changes to the underlying Fortran code (yes, I acknowledge that
>         I am a dinosaur) remake the DLL "bar.so" and then run foo
>         again.  This is all *without* quitting and restarting R.  (I'm
>         going to have to do this a few brazillion times, and
>         I want the iterations to be as quick as possible.)
>         This seems to work --- i.e. foo seems to obtain the latest
>         version of bar.so.  But have I just been lucky so far?  (I have
>         not experimented heavily).
>         Am I running risks of leading myself down the garden path?  Are
>         there Traps for Young (or even Old) Players lurking about?
>         I would appreciate Wise Counsel.
>         cheers,
>         Rolf Turner
>     ______________________________________________
>     R-help at r-project.org <mailto:R-help at r-project.org> mailing list --
>     To UNSUBSCRIBE and more, see
>     https://stat.ethz.ch/mailman/listinfo/r-help
>     <https://stat.ethz.ch/mailman/listinfo/r-help>
>     PLEASE do read the posting guide
>     http://www.R-project.org/posting-guide.html
>     <http://www.R-project.org/posting-guide.html>
>     and provide commented, minimal, self-contained, reproducible code.

More information about the R-help mailing list