Dear R-devel,

I think the following describes a bug in R. It seems to be associated with dyn.load() and/or something that happens at start-up. I have not filed a bug report yet (because I doubt my ability to rule out other explanations) but would happily do so if requested.

Observation:

If two dlls are loaded as a result of dyn.load() calls in .Rprofile, subsequent calls to dyn.load() issued at the R prompt result in loss of symbol names in the other dll (although not until one tries re-dyn.load()ing the second dll; re-dyn.load()ing just one of them works OK). This has occurred only since installing R 2.1.0.

Example:

Contents of file dummy1.c:
---------------------------
#include <R.h>
#include <Rdefines.h>
SEXP dummy1() {
    Rprintf("this is dummy1() in C\n") ;
    return R_NilValue ;
}
---------------------------

Contents of file dummy2.c
-------------------------
#include <R.h>
#include <Rdefines.h>

SEXP dummy2() {
    Rprintf("this is dummy2() in C\n") ;
    return R_NilValue ;
}
-------------------------


Files dummy1.so and dummy2.so are present in the directory as a result of
system("R CMD SHLIB dummy1.c")
system("R CMD SHLIB dummy2.c")
in a previous R session.



Contents of file .Rprofile: -------------------- dyn.load("dummy1.so") dyn.load("dummy2.so") --------------------

I start R, with this .Rprofile present. Although re-dyn.load()ing of the first dll seems unproblematic, re-dyn.load()ing the other dll and all subsequent dyn.load()s seem to result in loss of symbols in the other dll:


Type 'q()' to quit R.

options(STERM='iESS', editor='gnuclient -q')
ls(all=TRUE)
character(0)
is.loaded("dummy1") ; is.loaded("dummy2")
[1] TRUE
[1] TRUE
dyn.load("dummy1.so")
is.loaded("dummy1") ; is.loaded("dummy2")
[1] TRUE
[1] TRUE
dyn.load("dummy1.so")
is.loaded("dummy1") ; is.loaded("dummy2")
[1] TRUE
[1] TRUE
dyn.load("dummy2.so")
is.loaded("dummy1") ; is.loaded("dummy2")
[1] FALSE
[1] TRUE
dyn.load("dummy1.so")
is.loaded("dummy1") ; is.loaded("dummy2")
[1] TRUE
[1] FALSE



Now there is no .Rprofile. There is no problem:

Type 'q()' to quit R.

options(STERM='iESS', editor='gnuclient -q')
ls(all=TRUE)
character(0)
is.loaded("dummy1") ; is.loaded("dummy2")
[1] FALSE
[1] FALSE
dyn.load("dummy1.so")
is.loaded("dummy1") ; is.loaded("dummy2")
[1] TRUE
[1] FALSE
dyn.load("dummy2.so")
is.loaded("dummy1") ; is.loaded("dummy2")
[1] TRUE
[1] TRUE
dyn.load("dummy1.so")
is.loaded("dummy1") ; is.loaded("dummy2")
[1] TRUE
[1] TRUE
dyn.load("dummy2.so")
is.loaded("dummy1") ; is.loaded("dummy2")
[1] TRUE
[1] TRUE



The mailing lists contain some reports, for R 2.1.0, mentioning the error messages that result, such as

.Call("dummy1", PACKAGE="dummy1")
Error in .Call("dummy1", PACKAGE = "dummy1") :
        "C" function name not in DLL for package 'dummy1'

One example is at
http://tolstoy.newcastle.edu.au/R/help/05/04/2928.html

I would be happy to file a proper bug report, if that is deemed appropriate. I didn't see anything that was obviously relevant in the news file for R 2.1.0. Sorry if I am missing something obvious here.


Thanks very much,

Dan

version
         _
platform i386-pc-linux-gnu
arch     i386
os       linux-gnu
system   i386, linux-gnu
status
major    2
minor    1.0
year     2005
month    04
day      18
language R


Debian "sarge" linux

______________________________________________
R-devel@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to