[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
hardcode_direct problem on HP-UX/PA
From: |
Albert Chin |
Subject: |
hardcode_direct problem on HP-UX/PA |
Date: |
Tue, 25 Apr 2006 13:52:00 -0500 |
User-agent: |
Mutt/1.5.6i |
Why is hardcode_direct=yes on HP-UX/PA? From libtool.m4:
_LT_TAGDECL([], [hardcode_direct], [0],
[Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
DIR into the resulting binary])
On HP-UX/PA, hardcode_direct=yes and hardcode_minus_L=yes. On this
platform, when you link a shared library with the full path to the .sl
file on the command-line, it embeds the dependent library path as a
"static" entry in the newly-created library. It does not add DIR to
the library runtime path.
On HP-UX/PA, library entries in a shared library are either "static"
or "dynamic". Library entries marked "dynamic" can use the library
runtime path to locate a dependent "dynamic" library if the path
specified for the "dyanmic" library is not found while library entries
marked "static" cannot. Thus, if a library with "static" entries is
relocated, simply setting SHLIB_PATH to the new location won't locate
all the dependent libraries.
As an example, while linking libpng-1.2.4 with latest 1.5 CVS:
$ /bin/sh ./libtool --tag=CC --mode=link cc -g
-I/opt/TWWfsw/zlib11/include -Wl,+s,+b,/opt/TWWfsw/zlib11/lib
-L/opt/TWWfsw/zlib11/lib -lz -o libpng.la -rpath
/opt/build/china/libpng12/lib -version-info 2:2:0 png.lo pngerror.lo
pngget.lo pngmem.lo pngpread.lo pngrio.lo pngread.lo pngrtran.lo
pngrutil.lo pngset.lo pngtrans.lo pngwio.lo pngwrite.lo pngwtran.lo
pngwutil.lo -lm
cc -b -Wl,+h -Wl,libpng.sl.2 -Wl,+b -Wl,/opt/build/china/libpng12/lib
-o .libs/libpng.sl.2.2 .libs/png.o .libs/pngerror.o .libs/pngget.o
.libs/pngmem.o .libs/pngpread.o .libs/pngrio.o .libs/pngread.o
.libs/pngrtran.o .libs/pngrutil.o .libs/pngset.o .libs/pngtrans.o
.libs/pngwio.o .libs/pngwrite.o .libs/pngwtran.o .libs/pngwutil.o
-L/opt/TWWfsw/zlib11/lib /opt/TWWfsw/zlib11/lib/libz.sl -lm -lc
-Wl,+s -Wl,+b -Wl,/opt/TWWfsw/zlib11/lib
...
$ chatr .libs/libpng.sl.2.2
.libs/libpng.sl.2.2:
shared library
shared library dynamic path search:
SHLIB_PATH enabled second
embedded path enabled first
/opt/build/china/libpng12/lib:/opt/TWWfsw/zlib11/lib
internal name:
libpng.sl.2
shared library list:
static /opt/TWWfsw/zlib11/lib/libz.sl.2
dynamic /usr/lib/libm.2
dynamic /usr/lib/libc.2
...
$ cp /opt/TWWfsw/zlib11/lib/libz.sl.2 /tmp
# mv /opt/TWWfsw/zlib11 /opt/TWWfsw/zlib11-
$ SHLIB_PATH=/tmp ldd .libs/libpng.sl.2.2
/usr/lib/libc.2 => /usr/lib/libc.2
/usr/lib/libdld.2 => /usr/lib/libdld.2
/usr/lib/libc.2 => /usr/lib/libc.2
/usr/lib/libm.2 => /usr/lib/libm.2
/usr/lib/dld.sl: Can't open shared library: /opt/TWWfsw/zlib11/lib/libz.sl.2
/usr/lib/dld.sl: No such file or directory
Linking with hardcode_direct=no:
$ /bin/sh ./libtool --tag=CC --mode=link cc -g
-I/opt/TWWfsw/zlib11/include -Wl,+s,+b,/opt/TWWfsw/zlib11/lib
-L/opt/TWWfsw/zlib11/lib -lz -o libpng.la -rpath
/opt/build/china/libpng12/lib -version-info 2:2:0 png.lo pngerror.lo
pngget.lo pngmem.lo pngpread.lo pngrio.lo pngread.lo pngrtran.lo
pngrutil.lo pngset.lo pngtrans.lo pngwio.lo pngwrite.lo pngwtran.lo
pngwutil.lo -lm
rm -fr .libs/libpng.a .libs/libpng.la .libs/libpng.lai
.libs/libpng.sl .libs/libpng.sl.2 .libs/libpng.sl.2.2
cc -b -Wl,+h -Wl,libpng.sl.2 -Wl,+b -Wl,/opt/build/china/libpng12/lib
-o .libs/libpng.sl.2.2 .libs/png.o .libs/pngerror.o .libs/pngget.o
.libs/pngmem.o .libs/pngpread.o .libs/pngrio.o .libs/pngread.o
.libs/pngrtran.o .libs/pngrutil.o .libs/pngset.o .libs/pngtrans.o
.libs/pngwio.o .libs/pngwrite.o .libs/pngwtran.o .libs/pngwutil.o
-L/opt/TWWfsw/zlib11/lib -lz -lm -lc -Wl,+s -Wl,+b
-Wl,/opt/TWWfsw/zlib11/lib
...
$ chatr .libs/libpng.sl.2.2
.libs/libpng.sl.2.2:
shared library
shared library dynamic path search:
SHLIB_PATH enabled second
embedded path enabled first
/opt/build/china/libpng12/lib:/opt/TWWfsw/zlib11/lib
internal name:
libpng.sl.2
shared library list:
dynamic /opt/TWWfsw/zlib11/lib/libz.sl.2
dynamic /usr/lib/libm.2
dynamic /usr/lib/libc.2
...
$ cp /opt/TWWfsw/zlib11/lib/libz.sl.2 /tmp
# mv /opt/TWWfsw/zlib11 /opt/TWWfsw/zlib11-
$ SHLIB_PATH=/tmp ldd .libs/libpng.sl.2.2
/usr/lib/libc.2 => /usr/lib/libc.2
/usr/lib/libdld.2 => /usr/lib/libdld.2
/usr/lib/libc.2 => /usr/lib/libc.2
/usr/lib/libm.2 => /usr/lib/libm.2
/opt/TWWfsw/zlib11/lib/libz.sl.2 => /tmp/libz.sl.2
/usr/lib/libc.2 => /usr/lib/libc.2
How do we solve this? Either we set hardcode_direct=no for these
platforms or, in ltmain.in, make it smart enough to check and use
hardcode_minus_L=yes before hardcode_direct=yes.
--
albert chin (address@hidden)
- hardcode_direct problem on HP-UX/PA,
Albert Chin <=