I need some feedback for a Solaris C++ issue (this is the only issue
holding back the 1.5.20 release):

We fixed the failure of
  libtool --mode=link --tag=CXX CC -no-undefined..

with patches from this thread:
http://lists.gnu.org/archive/html/libtool-patches/2005-07/msg00088.html
http://lists.gnu.org/archive/html/libtool-patches/2005-08/msg00043.html

Now, the addition of `-lCstd -Crun' to the link line will usually cause
libCstd.so.X and libCrun.so.Y to be added to the DT_NEEDED ELF flag.

However, I have encountered a Solaris Workshop 6 update 1 installation
which lacks libCstd.so but not libCstd.so.1.  Thus, the link will take
objects from a static version of libCstd with PIC objects (if I'm not
mistaken), and the created C++ library will contain definitions for STL
symbols.

This is obviously very undesirable, and may lead to huge libraries and
subtle trouble with static state variables only noticed much later and
after much pain.

So I looked around.  I've found this documentation
http://docs-pdf.sun.com/806-7982/806-7982.pdf (page 21):

| The Sun WorkShop 6 update 2 C++ compiler (5.3) includes a shared
| version of the libCstd library.
| To use the shared version of libCstd, do the following:
| 1. As superuser, manually create the following symbolic links.
| 
| example% ln -s /usr/lib/libCstd.so.1 \
|   /opt/SUNWSpro/lib/libCstd.so
| example% ln -s /usr/lib/libCstd.so.1 \
|   /opt/SUNWSpro/lib/v8plus/libCstd.so
| example% ln -s /usr/lib/sparcv9/libCstd.so.1 \
|   /opt/SUNWSpro/lib/v9/libCstd.so
| 
| For the Intel 32-bit processor architecture, you do not need the last
| two links.
| 
| Note -- If your compiler is not installed in the /opt/SUNWSpro
| directory, ask your system administrator for the equivalent path on your
| system.
| 
| 2. Test the links.
| Compile any program with /opt/SUNWSpro/bin/CC, then type the command ldd
| a.out.  The output shows any dependency on /usr/lib/libCstd.so.1.
| 
| Once these symbolic links are created, libCstd is linked dynamically by
| default.
| 
| To link libCstd statically, use the -staticlib-Cstd option.

and this (page 52):
| Sun WorkShop 6 update 1 Compilers C++ (5.2) includes a shared version of
| the libCstd library.
| 
| To use the shared version of libCstd, compile the program in the usual
| way, but use a separate link step.  In the link step, use the
| -library-no%Cstd option, and put the shared library name explicitly on
| the command line, as shown in this example.
| 
| example% CC -library=no%Cstd *.o \
|   -o myprog /opt/SUNWSpro/WS6U1/lib/libCstd.so.1


I don't see a way to have Libtool work correctly in all cases, and I
don't see an easy way to avoid any subtle damage, short of reverting
the patches we've applied, if we are to support older versions of the
compiler, users without root access, and eventual use of
`-staticlib-Cstd'[1].

I'd like any feedback about possible solutions, general ideas about the
issue, or just how *your* Sun CC is set up (with or without these links
etc.).

Thanks,
Ralf

[1] My best bet would be: ignore version 5.1, assume people that want
shared libCstd have set the link, and use the method described for 5.2,
namely: test compile, look at `ldd' output.  But that possibly sucks for
cross-compilation, and requires libtool to use yet another tool.


_______________________________________________
http://lists.gnu.org/mailman/listinfo/libtool

Reply via email to