Albert Chin <[EMAIL PROTECTED]> writes:

> > But there is a problem with this: LD_LIBRARY_PATH is always searched
> > after the etched-in path.  Also, the etched-in path is searched before
> > the system path.
> 
> According to ld.so.1(1) on Solaris 8/SPARC:
>      The runtime linker uses a prescribed search path for  locat-
>      ing  the  dynamic  dependencies  of  an  object. The default
>      search paths are the runpath recorded in  the  object,  fol-
>      lowed  by /usr/lib for 32-bit objects or /usr/lib/64 for 64-
>      bit objects. This latter component can be modified  using  a
>      configuration  file  created  with  crle(1).  The runpath is
>      specified when the dynamic object is constructed  using  the
>      -R  option to ld(1). LD_LIBRARY_PATH can be used to indicate
>      directories to be searched before the default directories.
> 
> Therefore, LD_LIBRARY_PATH is searched *before* the etched-in path. Is
> there any platform where this is not the case?

On Linux the etched-in path is searched before LD_LIBRARY_PATH.

Here is an strace on Linux showing the etched-in path searched before
LD_LIBRARY_PATH:

execve("bin/httpd", ["bin/httpd"], [/* 36 vars */]) = 0
brk(0)                                  = 0x8094b64
open("/etc/ld.so.preload", O_RDONLY)    = -1 ENOENT (No such file or
directory)
open("/home/trawick/apache/httpd-2.0.35/bindist/lib/i686/mmx/libaprutil.so.0",
O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/home/trawick/apache/httpd-2.0.35/bindist/lib/i686/mmx",
0xbffff4b4) = -1 ENOENT (No such file or directory)
open("/home/trawick/apache/httpd-2.0.35/bindist/lib/i686/libaprutil.so.0",
O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/home/trawick/apache/httpd-2.0.35/bindist/lib/i686", 0xbffff4b4)
= -1 ENOENT (No such file or directory)
open("/home/trawick/apache/httpd-2.0.35/bindist/lib/mmx/libaprutil.so.0",
O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/home/trawick/apache/httpd-2.0.35/bindist/lib/mmx", 0xbffff4b4)
= -1 ENOENT (No such file or directory)
open("/home/trawick/apache/httpd-2.0.35/bindist/lib/libaprutil.so.0",
O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/home/trawick/apache/httpd-2.0.35/bindist/lib", 0xbffff4b4) = -1
ENOENT (No such file or directory)
open("/tmp/2.0.35/lib/i686/mmx/libaprutil.so.0", O_RDONLY) = -1 ENOENT
(No such file or directory)
stat("/tmp/2.0.35/lib/i686/mmx", 0xbffff4b4) = -1 ENOENT (No such file
or directory)
open("/tmp/2.0.35/lib/i686/libaprutil.so.0", O_RDONLY) = -1 ENOENT (No
such file or directory)
stat("/tmp/2.0.35/lib/i686", 0xbffff4b4) = -1 ENOENT (No such file or
directory)
open("/tmp/2.0.35/lib/mmx/libaprutil.so.0", O_RDONLY) = -1 ENOENT (No
such file or directory)
stat("/tmp/2.0.35/lib/mmx", 0xbffff4b4) = -1 ENOENT (No such file or
directory)
open("/tmp/2.0.35/lib/libaprutil.so.0", O_RDONLY) = 3


> > I think we'd be better off if there were no path etched into httpd for
> > a binary distribution.  (This could be useful for more than just the
> > binbuild.sh scenario.)  Unfortunately, it isn't clear how to do this
> > with libtool.  When apr.la is created -rpath is required.  It then
> > goes into apr.la and I think that is what results in the etched-in
> > path for httpd.
> > 
> > Any ideas on how to deal with this issue?
> > 
> > It would be nicer to just replace the etched-in value at install
> > time.  I don't think that libtool can do that unless you do a re-link
> > on the target machine.  We could binary-edit the path within the
> > executable but that doesn't sound very maintainable.
> 
> The correct solution is re-linking on the target. Libtool does this by
> default when installing the binary.

Any idea what we have to change to make that happen?  That requires
shipping all the .o .lo .a .la, right?

> BTW, are you talking about pre-compiled binaries provided by
> apache.org or pre-compiled binaries available in RPM/DEB/etc format?

binaries provided by apache.org

-- 
Jeff Trawick | [EMAIL PROTECTED]
Born in Roswell... married an alien...

Reply via email to