[comp.windows.x] Sun Shared Library Problems - new info

becker@CS.ROCHESTER.EDU (Tim Becker) (01/12/90)

I want to install R4 in a non-standard location.  I've followed the
discussion and proposed solutions to the "can't find libXmu.so.xxx"
problems.  So when I built R4 and installed it, I didn't figure I'd
have a problem.  I ran ldconfig setting my (non-standard) library
path, but my R4 programs wouldn't run (saying they can't find the X
libraries).  Worse yet, "ldd xterm" (for example) came up blank --
nothing printed out telling me the location of *any* libraries.

I wrote a test program to figure things out.  Here's what I've
learned:

The library location specified at load time (from cc or ld with the -L
option) tells ld.so (the dynamic loader) where to look for a library
at run time.  In my test case, I wrote a library and small program -
linking in the library using "cc -o play play.o -L. -ltest".  I can
run this program when my pwd is the current directory, but not from
anywhere else.  -- even with ldconfig set to that directory!  If I
change the cc option "-L." to "-L<full path to pwd>", it runs fine.

Then I wondered about LD_LIBRARY_PATH.  It comes real close to solving
the above problem.  I can link with a relative path ("-L.") and
override this by setting LD_LIBRARY_PATH to <full path to pwd>.  Now I
can run my test program from anywhere.

One problem -- if the program is setuid to someone other than you,
LD_LIBRARY_PATH is ignored by ld.so.  So, this program won't be able
to find his library.  I don't know of any way around this.

How does this relate to R4? --  All the clients are linked with -L
pointing to the relative path of the X libraries in the build tree.
So, running ldconfig telling it the final (non-standard) resting place
of your X libraries won't work.  Having every X user set
LD_LIBRARY_PATH to this library location almost works.  Xterm is
setuid root - so they can't get xterm to run.  (Besides, I'm not sure
I want to burden my users with this LD_LIBRARY_PATH stuff).

I'm starting to think that the right solution is to get the client
Imakefile's to list -L<install library path> in addition to the
-L<build tree library path>.  I think this will work.

Comments?

(BTW, I'm running SunOS4.0.3 on a SparcStation 1).

Tim Becker.
becker@cs.rochester.edu

haffley@cs.purdue.EDU (P Michael &) (01/12/90)

I noticed the same thing.  It seems that ldconfig does NOT add the
directory to its search path.  I did notice that one of the default
ldconfig directories is /usr/local/lib, so I just symbolicly linked
the lib files to this directory and now everything runs okay (after
executing ldconfig).
 _ __      _ _ _                    _     _    ,              _
' )  )    ' ) ) )      /           //    ' )  /      /)  /)  //
 /--'      / / / o _. /_  __.  _  //      /--/ __.  //  //  // _  __  ,
/ o       / ' (_<_(__/ /_(_/|_</_</_     /  (_(_/|_//__//__</_</_/ (_/_
                                                  />  />            /
                                                 </  </            '

P. Michael Haffley
haffley@iuvax.cs.indiana.edu
(ames,rutgers,pur-ee,att)!haffley