dependencies in .so files

guido@sirio.stat.unipd.it guido@sirio.stat.unipd.it
Thu, 28 May 1998 11:34:56 +0100 (GMT+0100)


Martin Maechler writes:
> 
> >>>>> "Guido" == Guido Masarotto <guido@sirio.stat.unipd.it> writes:
> 
>     >> From the dlopen man page:
>     Guido> void *dlopen (const char *filename, int flag);
>     Guido> ................................................
>     Guido> RTLD_GLOBAL may be or'ed with flag
>     Guido> in which case the external symbols defined in the library will be
>     Guido> made available to subsequently loaded libraries.
>  
>     Guido> So, I try: 
>     Guido> 1) I modify src/unix/dynload.c changing the flag of dlopen
>     Guido> from RTLD_LAZY to (RTLD_LAZY | RTLD_GLOBAL)
> 
> R-core: 
> 	Shall we do this, for 0.62?  -- or even try to have "configure" find out
> 	if  RTLD_GLOBAL  is supported on the given system?
If I can give suggestions:
1) Independently from the RTLD_GLOBAL flag, I will change RTLD_LAZY to
   RTLD_NOW. As Luke T. summarized yesterday in this way a shared library
   which cannot resolve all its symbols (in R.binary or in other libraries)
   cannot be load. This give three   advantages:
   a) At least under Linux, if I call a dynamic linked routine which
      cannot resolve its dependencies, I get a segmentation fault and
      R exit. Of course, we can try to intercept this problem but
      as also Luke noted, it is difficult to be sure that all the systems 
      will trigs an  appropriate signal; in addition
   b) debugging of a shared library becomes simple; at least, we are
      sure that all the functions in the library can be called.
   c) This correspond to the standard for not Unix machine; I am
      sure for Windows but, if I remember, Luke said also for the Mac.
   Perhaps, if a library cannot be loaded, the corresponding dlerror()
   string should be used for giving to the user some information
   on why.
2) Coming to RTDL_GLOBAL; here the question is the one raised by
   Luke: portability. I suppose that the solution suggested by
   Luke (use "recursive" shared libraries)  is more portable than mine. 
   After a first failure, I was   able to run my "silly" example setting 
   the LD_LIBRARY_PATH shell variable,i.e., instructing ld.so about where 
   to search.
   

> Guido:  Have you ever looked at 0.62  (and porting it to Win32) ?
> 	(get it from <CRAN>/src/devel/R-snapshot.tar.gz)
I had no time. I downloaded a snapshot next week but I didn't make
any trial. Is the unix/system.c changed a lot? I have just looked
to it now and it seems quite similar to the 0.61.x one.

To all the R people: have a nice day.
guido m.
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._