bug-libtool
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

libtool, gettext, and HP-UX ia64 shared libraries


From: Bob Proulx
Subject: libtool, gettext, and HP-UX ia64 shared libraries
Date: Sat, 30 Dec 2006 20:03:23 -0700
User-agent: Mutt/1.5.9i

A while ago I raised an issue trying to build coreutils on HP-UX ia64.

  http://lists.gnu.org/archive/html/bug-gnu-utils/2006-08/msg00083.html

Things are still not working there and so I thought I would heat up
the issue a little bit.  I had some time to dig into this and here is
what I have found.  I can continue but I know nothing about libtool
and would need some guidance.

I just tested the latest gettext-1.16.1 on HP-UX 11.23 ia64 and it
still fails in exactly the same way as previously reported.  I am
using the native HP ANSI C compiler.  (Getting coreutils up is really
the first step in what will undoubtedly be a long bootstrap process.)

Let me walk through from top to bottom.  I propose a fix at the end.
The problematic command seems to be the following, run from the
gettext-tools/libuniname directory:

  /bin/sh ../libtool --tag=CC   --mode=link cc  -g   -o test-names test-names.o 
libuniname.a ../gnulib-lib/libgettextlib.la
  ld: Can't find dependent library "libintl.so.8"

The part of the libtool script that causes this is on 5177 of the
script generated for me.  Hopefully this is enough context to identify
the pertinent portion of the script.

        fi
      fi

      # Replace the output file specification.
      link_command=`$echo "X$link_command" | $Xsed -e 
'address@hidden@%'"$output_objdir/$outputname"'%g'`

      # Delete the old output files.
      $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname

      $show "$link_command"
      $run eval "$link_command" || exit $?

      # Now create the wrapper script.
      $show "creating $output"

      # Quote the relink command for shipping.

The command run is:

  cc -g -o .libs/test-names test-names.o libuniname.a 
../gnulib-lib/.libs/libgettextlib.so 
/usr/local/build/coreutils/src/gettext-0.16.1/gettext-tools/intl/.libs/libintl.so
 -lc -Wl,+b -Wl,/usr/local/build/coreutils/lib
  ld: Can't find dependent library "libintl.so.8"
  Fatal error.

But the files all look okay.

  ls -ld 
/usr/local/build/coreutils/src/gettext-0.16.1/gettext-tools/intl/.libs/libintl.so
  lrwxrwxr-x    1 rwp      rwp            14 Dec 30 16:52 
/usr/local/build/coreutils/src/gettext-0.16.1/gettext-tools/intl/.libs/libintl.so
 -> libintl.so.8.1

  ls -ld 
/usr/local/build/coreutils/src/gettext-0.16.1/gettext-tools/intl/.libs/libintl.so.8.1
  -rwxrwxr-x    1 rwp      rwp        217744 Dec 30 16:52 
/usr/local/build/coreutils/src/gettext-0.16.1/gettext-tools/intl/.libs/libintl.so.8.1

  ls -ld -L 
/usr/local/build/coreutils/src/gettext-0.16.1/gettext-tools/intl/.libs/libintl.so
  -rwxrwxr-x    1 rwp      rwp        217744 Dec 30 16:52 
/usr/local/build/coreutils/src/gettext-0.16.1/gettext-tools/intl/.libs/libintl.so

  find .. -name 'libintl.so*' -print
  ../intl/.libs/libintl.so.8.1
  ../intl/.libs/libintl.so.8
  ../intl/.libs/libintl.so

This step succeeds on HP-UX 11.23 hppa.  But the generated libtool
scripts are so different between hppa and ia64 as to be almost
unrelated making comparisons between them impractical.  However the
hppa link command that succeeds on that platform is:

  cc -g -o .libs/test-names test-names.o  libuniname.a 
../gnulib-lib/.libs/libgettextlib.sl 
/usr/local/build/coreutils/src/gettext-0.16.1/gettext-tools/intl/.libs/libintl.sl
 -lc -Wl,+b 
-Wl,/usr/local/build/coreutils/src/gettext-0.16.1/gettext-tools/gnulib-lib/.libs:/usr/local/build/coreutils/src/gettext-0.16.1/gettext-tools/intl/.libs:/usr/local/build/coreutils/lib

Note the additional paths in the -Wl option.
Trying that same thing fails:

  cc -g -o .libs/test-names test-names.o libuniname.a 
../gnulib-lib/.libs/libgettextlib.so 
/usr/local/build/coreutils/src/gettext-0.16.1/gettext-tools/intl/.libs/libintl.so
 -lc -Wl,+b 
-Wl,/usr/local/build/coreutils/src/gettext-0.16.1/gettext-tools/gnulib-lib/.libs:/usr/local/build/coreutils/src/gettext-0.16.1/gettext-tools/intl/.libs:/usr/local/build/coreutils/lib
  ld: Can't find dependent library "libintl.so.8"
  Fatal error.

However adding -L ../intl/.libs to the original failing command works.
Let me repeat the original failing command on ia64 so that they are
close together in this message.

  cc -g -o .libs/test-names test-names.o libuniname.a 
../gnulib-lib/.libs/libgettextlib.so 
/usr/local/build/coreutils/src/gettext-0.16.1/gettext-tools/intl/.libs/libintl.so
 -lc -Wl,+b -Wl,/usr/local/build/coreutils/lib
  ld: Can't find dependent library "libintl.so.8"
  Fatal error.

Adding -L ../intl/.libs allows this to succeed.  This following
command successfully links the test-names program.

  cc -g -o .libs/test-names test-names.o libuniname.a -L ../intl/.libs 
../gnulib-lib/.libs/libgettextlib.so 
/usr/local/build/coreutils/src/gettext-0.16.1/gettext-tools/intl/.libs/libintl.so
 -lc -Wl,+b -Wl,/usr/local/build/coreutils/lib

Adding a -L path option seems to be required here.

Here is what (I think) are the interesting parts of chatr on the
result.  This all appears to be as desired as far as I can tell.

         shared library dynamic path search:
             LD_LIBRARY_PATH    enabled  first 
             SHLIB_PATH         enabled  second
             embedded path      enabled  third  /usr/local/build/coreutils/lib
         shared library list:
             libgettextlib-0.16.1.so
             libintl.so.8
             libc.so.1

Hopefully this helps to clarify the problem.

Thanks
Bob




reply via email to

[Prev in Thread] Current Thread [Next in Thread]