William A. Rowe, Jr. wrote:
Henry Jen wrote:
William A. Rowe, Jr. wrote:
The issue I have is that your -enforcing- -R destroys my
-portability-. We
need to find a happy comprimize to build to a manditory -prefix
versus the
usual -prefix, yet relocatable (with LD_LIBRARY_PATH).
Hmm, I am curious what portability is destroyed. :-)
I misunderstood the portability you referring to, thought it means other
platforms. Glad to know that you are using Solaris and SunStudio. :-P
IIUC, before patch, my solaris binary can deployed at an arbitrary
/opt/apache2/
location, apachectl resolves the LD_LIBRARY_PATH. Before patch, your
arbitrary
solution (linked to a thirdparty build of expat installed in
/usr/local/lib or
some other, nonstandard, location) fails to resolve libexpat.so at run
time.
-R gives a default search path, LIB_LIBRARY_PATH still can be used when
needed.
Quote `man ld.so.1` on Solaris:
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 a series of defaults. For 32-bit objects, the
defaults are /lib followed by /usr/lib. For 64-bit objects,
the defaults are /lib/64 followed by /usr/lib/64. These
defaults component can be modified using a configuration
file that is created with crle(1). The runpath is specified
when the dynamic object is constructed using the -R option
to ld(1). The environment variable LD_LIBRARY_PATH can be
used to indicate directories to be searched before the
default directories.
I work out the patch because I want to use the default expat installed
by Solaris system(in /usr/sfw/lib, which is not in the default search
path), not custom built or the one come with apr-util.
After patch, my solaris binary can no longer be redeployed to
/opt/httpd/, but
your binary finds your expat in /opt/sfw/lib or where ever.
This should not be true, but I could be overlooking. Would you please
elaborate?
The difference between with or without -R is the -R will be searched
before the system default. Unless you got a different copy in the -R
pointed path, there should be no difference. But I wonder how could that
happen, -R is about to make sure you are getting the correct copy.
So my point is, if you want to add -R explicitly to your ldflags, that's
cool.
If you want to come up with a proposal to make this automatic but optional,
that's cool too. If you unilaterally decide your way is right, that's
not cool.
Your comment is very much appreciated, gives me a chance to exam my
understanding. :-)
Before we sort out the problem, how about let's remove the -R and commit
the rest? That at least allows configure to locate the lib correctly. I
will try to ping you on irc to have some discussion if you get some time.
As the coolness, I want to work with the community to make sure I am
doing the correct thing, which is why I always consult upstream team.
It's the advise I got from Solaris engineers to use -R instead of change
my system default setting with crle, and don't set LD_LIBRARY_PATH.
Following two URLs have covered the topic.
http://www.visi.com/~barr/ldpath.html
http://linuxmafia.com/faq/Admin/ld-lib-path.html
Thanks again for the comment, I really appreciate.
Cheers,
Henry