Dear Rene et al, The way currently the ROOT dynamic libraries are built do not show the dependencies between them on linux. If I do for example > ldd libGpad.so libstdc++.so.5 => /usr/local/gcc-alt-3.2/lib/libstdc++.so.5 (0x400da000) libm.so.6 => /lib/i686/libm.so.6 (0x4019f000) libgcc_s.so.1 => /usr/local/gcc-alt-3.2/lib/libgcc_s.so.1 (0x401c1000) libc.so.6 => /lib/i686/libc.so.6 (0x42000000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000) But in reality this library depends on libCore.so among others. This is not a problem when using the root.exe main executable since this one has been linked explicitly with all the necessary libraries. Therefore, the symbols are available at run time from the main program. The problem is when using another main program (for example the python shell). In this case, the main program has not been linked with any ROOT libraries and when trying to dynamically load ROOT libraries like libGpad.so, which depends on others, the loading fails with unresolved symbols. If the dependency would be explicit (by linking with them during build time) there will be no problem. A "hack work around" I found is to explicitly dlopen dependent libraries with RTLD_GLOBAL flag on, even if they have been already loaded. But this is really not very nice and not robust a all. Would it be possible to change the way ROOT libraries are built such that dependencies become explicit? ------------------------------------------------------------ Pere Mato CERN, EP Division, CH 1211 Geneva 23, Switzerland e-mail: Pere.Mato@cern.ch tel: +41 22 76 78696 fax: +41 22 76 79425 gsm: +41 79 20 10855
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:10 MET