Hello,

Inline.

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 = "")
    dyn.load(dynlib)
}

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

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 <ruipbarra...@sapo.pt <mailto:ruipbarra...@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@r-project.org <mailto:R-help@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.



______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to