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.
character(0)options(STERM='iESS', editor='gnuclient -q') ls(all=TRUE)
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.
character(0)options(STERM='iESS', editor='gnuclient -q') ls(all=TRUE)
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