<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body><p style="margin-top:0;margin-bottom:0;margin-left:0;margin-right:0;">Am Donnerstag, 11. Februar 2021, 12:20:33 CET schrieb Bastian Blank:</p>
<p style="margin-top:0;margin-bottom:0;margin-left:0;margin-right:0;">> Hi Johannes</p>
<br /><p style="margin-top:0;margin-bottom:0;margin-left:0;margin-right:0;">Hello Bastian!</p>
<br /><p style="margin-top:0;margin-bottom:0;margin-left:0;margin-right:0;">> On Thu, Feb 11, 2021 at 09:26:48AM +0100, Johannes Ranke wrote:</p>
<p style="margin-top:0;margin-bottom:0;margin-left:0;margin-right:0;">> > dyn.load is used in base R to load compiled code from R packages.</p>
<p style="margin-top:0;margin-bottom:0;margin-left:0;margin-right:0;">> </p>
<p style="margin-top:0;margin-bottom:0;margin-left:0;margin-right:0;">> Can you show some examples please?  I know C and POSIX, but not much</p>
<p style="margin-top:0;margin-bottom:0;margin-left:0;margin-right:0;">> about R.</p>
<br /><p style="margin-top:0;margin-bottom:0;margin-left:0;margin-right:0;">Well, in a nutshell, loading a package in R means calling library [1] which in turn calls loadNamespace [2] which, if the package uses compiled code, calls library.dynam [3], which uses dyn.load [4] after normalizing the path to the DLL.</p>
<br /><p style="margin-top:0;margin-bottom:0;margin-left:0;margin-right:0;">So if you load e.g. the package MASS in R, dyn.load is called:</p>
<br /><p style="margin-top:0;margin-bottom:0;margin-left:0;margin-right:0;"><span style="background-color:#ffffff;"><span style="font-family:monospace;"><span style="color:#000000;">R> debug(dyn.load) </span></span></span><br />R> library(MASS) <br />debugging in: dyn.load(file, DLLpath = DLLpath, ...) <br />debug: .Internal(dyn.load(x, as.logical(local), as.logical(now), "")) <br />Browse[2]> x <br />[1] "/usr/local/lib/R/site-library/MASS/libs/MASS.so" </p>
<p style="margin-top:0;margin-bottom:0;margin-left:0;margin-right:0;">...</p>
<br /><p style="margin-top:0;margin-bottom:0;margin-left:0;margin-right:0;">> > The documentation of dyn.load says that it accepts a path to a dynamic</p>
<p style="margin-top:0;margin-bottom:0;margin-left:0;margin-right:0;">> > shared object. Do we need more than that?</p>
<p style="margin-top:0;margin-bottom:0;margin-left:0;margin-right:0;">> </p>
<p style="margin-top:0;margin-bottom:0;margin-left:0;margin-right:0;">> So my change is no problem, because it only changes the behaviour for</p>
<p style="margin-top:0;margin-bottom:0;margin-left:0;margin-right:0;">> 'dyn.load("object.so")', but not for</p>
<p style="margin-top:0;margin-bottom:0;margin-left:0;margin-right:0;">> 'dyn.load("/home/foo/projects/bar/object.so")'.</p>
<p style="margin-top:0;margin-bottom:0;margin-left:0;margin-right:0;">> </p>
<p style="margin-top:0;margin-bottom:0;margin-left:0;margin-right:0;">> The documentation does not list a search behaviour for bare library</p>
<p style="margin-top:0;margin-bottom:0;margin-left:0;margin-right:0;">> names on non-Windows systems.  So completely ignoring the system library</p>
<p style="margin-top:0;margin-bottom:0;margin-left:0;margin-right:0;">> paths is kind of weird.</p>
<br /><p style="margin-top:0;margin-bottom:0;margin-left:0;margin-right:0;">I can see that it looks weird - but is it a bug?</p>
<br /><p style="margin-top:0;margin-bottom:0;margin-left:0;margin-right:0;">Johannes</p>
<br /><p style="margin-top:0;margin-bottom:0;margin-left:0;margin-right:0;"><a href="https://github.com/wch/r-source/blob/trunk/src/library/base/R/library.R#L54">[1] https://github.com/wch/r-source/blob/trunk/src/library/base/R/library.R#L54</a> </p>
<br /><p style="margin-top:0;margin-bottom:0;margin-left:0;margin-right:0;">[2] <a href="https://github.com/wch/r-source/blob/trunk/src/library/base/R/namespace.R#L185">https://github.com/wch/r-source/blob/trunk/src/library/base/R/namespace.R#L185</a> </p>
<br /><p style="margin-top:0;margin-bottom:0;margin-left:0;margin-right:0;"><a href="https://github.com/wch/r-source/blob/trunk/src/library/base/R/library.R#L572">[3] https://github.com/wch/r-source/blob/trunk/src/library/base/R/library.R#L572</a> </p>
<br /></body>
</html>