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 ([EMAIL PROTECTED]) _______________________________________________ http://lists.gnu.org/mailman/listinfo/libtool