Hi,
One of the recurring troubles we run into can be traced (in my opinion) to the
fact that ROOT's dynamic loading mechanism doesn't use LD_LIBRARY_PATH. Here's
a simple patch to teach it how:
--- root.orig/src/UNIX_UnixSystem.cxx Wed Jul 28 04:41:08 1999
+++ root/src/UNIX_UnixSystem.cxx Fri Sep 10 12:38:26 1999
@@ -2317,13 +2317,18 @@
const char *TUnixSystem::GetDynamicPath()
{
// Get shared library search path. Static utility function.
-
+ static const char *rootdynpath = 0;
static const char *dynpath = 0;
+ static const char *tmp = 0;
if (dynpath == 0) {
- dynpath = gEnv->GetValue("Root.DynamicPath", (char*)0);
- if (dynpath == 0)
- dynpath = StrDup(Form(".:%s/lib", gRootDir));
+ tmp = gEnv->GetValue("Root.DynamicPath", (char*)0);
+ rootdynpath = getenv("ROOTDYNPATH");
+ if (tmp == 0) {
+ dynpath = StrDup(Form(".:%s", rootdynpath));
+ } else {
+ dynpath = StrDup(Form("%s:%s", tmp, rootdynpath));
+ }
}
return dynpath;
}
--- root.orig/src/ROOTX_rootx.cxx Wed Jul 28 04:48:17 1999
+++ root/src/ROOTX_rootx.cxx Fri Sep 10 12:39:26 1999
@@ -191,6 +191,38 @@
putenv((char *)msg);
}
+static void SetDynamicPath()
+{
+ // Init dynamic loading path for the different platforms.
+
+ static char msg[512];
+
+#if defined(__linux) || defined(__alpha) || defined(__sgi) || defined(__sun) ||
\
+ defined(__FreeBSD__)
+ if (getenv("LD_LIBRARY_PATH"))
+ sprintf(msg, "ROOTDYNPATH=%s:%s/lib",
+ getenv("LD_LIBRARY_PATH"),
+ getenv("ROOTSYS"));
+ else
+ sprintf(msg, "ROOTDYNPATH=%s/lib", getenv("ROOTSYS"));
+#elif defined(__hpux) || defined(_HIUX_SOURCE)
+ if (getenv("SHLIB_PATH"))
+ sprintf(msg, "ROOTDYNPATH=%s:%s/lib",
+ getenv("SHLIB_PATH"),
+ getenv("ROOTSYS"));
+ else
+ sprintf(msg, "ROOTDYNPATH=%s/lib", getenv("ROOTSYS"));
+#elif defined(_AIX)
+ if (getenv("LIBPATH"))
+ sprintf(msg, "ROOTDYNPATH=%s:%s/lib",
+ getenv("LIBPATH"),
+ getenv("ROOTSYS"));
+ else
+ sprintf(msg, "ROOTDYNPATH=%s/lib", getenv("ROOTSYS"));
+#endif
+ putenv((char *)msg);
+}
+
static void SigUsr1(int)
{
// When we get SIGUSR1 from child (i.e. ROOT) then pop down logo.
@@ -332,6 +364,9 @@
// Make sure library path is set
SetLibraryPath();
+
+ // Initialize the path for locating dynamically loaded libraries
+ SetDynamicPath();
// Execute actual ROOT module
execv(arg0, argvv);
Enjoy,
Dave
--
David Morrison Brookhaven National Laboratory phone: 516-344-5840
Physics Department, Bldg 510 C fax: 516-344-3253
Upton, NY 11973-5000 email: dave@bnl.gov
This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:43:39 MET