[Rd] Possible bug or annoyance with library.dynam.unload()

Romain Francois romain.francois at dbmail.com
Wed Sep 22 18:53:12 CEST 2010


Le 22/09/10 17:31, Duncan Murdoch a écrit :
>
> On 22/09/2010 11:22 AM, Karl Forner wrote:
>> Thanks Duncan for your suggestion.
>>
>> I could not find any package using dynamic library, namespaces and not
>> the
>> useDynLib pragma so
>> I created a minimalistic package to demonstrate the problem.
>> Please find attached a very small package foo (8.8k)
>
> Your package depends on Rcpp, so I didn't try it in the alpha version of
> 2.12.0 (Rcpp isn't available there in a Windows binary at the moment)

(This might be moot given Karl's answer), but:

We are working on having Rcpp to work with R 2.12.0, we have currently a 
few issues to deal with due to the use of a newer compiler for R 2.12.0.

We hope we can make this happen before R 2.12.0 is out next month.

Romain

> but I did try it in R-patched. With one minor change to your script (the
> lib.loc needs to be "local", not "local/" on Windows), I can reproduce
> the problem, and it looks like a bug to me. Thanks for the report, I'll
> put it on the bugs page, and hopefully it will be fixed before the
> 2.12.0 release.
>
> Duncan Murdoch
>
>> Steps to reproduce the problem:
>>
>> * unarchive it ( tar zxvf foo_0.1.tar.gz )
>> * cd foo
>> * install it locally ( mkdir local; R CMD INSTALL -l local . )
>> * R
>> > library(foo, lib.loc="local/")
>> >.dynLibs()
>> # there you should be able to see the foo.so lib, in my case
>> /x05/people/m160508/workspace/foo/local/foo/libs/foo.so
>>
>> > unloadNamespace("foo")
>> .onUnload, libpath= local/fooWarning message:
>> .onUnload failed in unloadNamespace() for 'foo', details:
>> call: library.dynam.unload("foo", libpath)
>> error: shared library 'foo' was not loaded
>>
>> #The libpath that the .onUnload() gets is "local/foo".
>>
>> #This fails:
>> >library.dynam.unload("foo", "local/foo")
>> Error in library.dynam.unload("foo", "local/foo") :
>> shared library 'foo' was not loaded
>>
>> # but if you use the absolute path it works:
>> >library.dynam.unload("foo",
>> "/x05/people/m160508/workspace/foo/local/foo")
>>
>> Karl
>>
>> On Tue, Sep 21, 2010 at 5:33 PM, Duncan
>> Murdoch<murdoch.duncan at gmail.com>wrote:
>>
>> > On 21/09/2010 10:38 AM, Karl Forner wrote:
>> >
>> >> Hello,
>> >>
>> >> I got no reply on this issue.
>> >> It is not critical and I could think of work-around, but it really
>> looks
>> >> like a bug to me.
>> >> Should I file a bug-report instead of posting in this list ?
>> >>
>> >
>> > I'd probably post instructions for a reproducible example first.
>> Pick some
>> > CRAN package, tell us what to do with it to trigger the error, and
>> then we
>> > can see if it's something special about your package or Roxygen or a
>> general
>> > problem.
>> >
>> > Duncan Murdoch
>> >
>> > Thanks,
>> >>
>> >> Karl
>> >>
>> >> On Thu, Sep 16, 2010 at 6:11 PM, Karl Forner<karl.forner at gmail.com>
>> >> wrote:
>> >>
>> >> > Hello,
>> >> >
>> >> > I have a package with a namespace. Because I use Roxygen that
>> >> overwrites
>> >> > the NAMESPACE file each time it is run, I use a R/zzz.R file with
>> >> > an .onLoad() and .onUnload() functions to take care of loading and
>> >> > unloading my shared library.
>> >> >
>> >> > The problem: if I load my library from a local directory, then the
>> >> > unloading of the package fails, e.g:
>> >> >
>> >> > # loads fine
>> >> > >library(Foo, lib.loc=".Rcheck")
>> >> >
>> >> > >unloadNamespace("Foo")
>> >> > Warning message:
>> >> > .onUnload failed in unloadNamespace() for 'Foo', details:
>> >> > call: library.dynam.unload("Foo", libpath)
>> >> > error: shared library 'Foo' was not loaded
>> >> >
>> >> > # I traced it a little:
>> >> > >library.dynam.unload("Foo", ".Rcheck/Foo")
>> >> > Error in library.dynam.unload("Foo", ".Rcheck/Foo") :
>> >> > shared library 'Foo' was not loaded
>> >> >
>> >> > # using an absolute path works
>> >> > >library.dynam.unload("Foo", "/home/toto/.Rcheck/Foo")
>> >> >
>> >> >
>> >> > So from what I understand, the problem is either that the relative
>> >> libpath
>> >> > is sent to the .onUnload() function instead of the absolute one,
>> >> > or that library.dynam.unload() should be modified to handle the
>> >> relative
>> >> > paths.
>> >> >
>> >> > Am I missing something ? What should I do ?
>> >> >
>> >> > Thanks,
>> >> >
>> >> >
>> >> > Karl


-- 
Romain Francois
Professional R Enthusiast
+33(0) 6 28 91 30 30
http://romainfrancois.blog.free.fr
|- http://bit.ly/cCmbgg : Rcpp 0.8.6
|- http://bit.ly/bzoWrs : Rcpp svn revision 2000
`- http://bit.ly/b8VNE2 : Rcpp at LondonR, oct 5th



More information about the R-devel mailing list