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.