[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
C++ shared libraries on Sun Forte compiler
From: |
Ulrik Petersen |
Subject: |
C++ shared libraries on Sun Forte compiler |
Date: |
Thu, 28 Nov 2002 16:35:56 +0100 (CET) |
Hello,
libtool is great, but unfortunately it still does not
work equally well on all platforms. I have problems
with building shared C++ libraries on the Sun Forte CC
compiler, especially when using templates. There are
severel problems, all of which I will describe below.
The Sun Forte compiler has problems when object files
are moved around, which libtool does by default. This
is because the Sun Forte compiler stores template
instances in separate files, along with information
about which object files belong with which template
instances. Thus when object files are moved around
(between $libdir and $objdir), the linker (which
happens to be the compiler) does not know where to
find the template instances, resulting in unresolved
symbols. There is a FAQ dealing with this at:
http://wwws.sun.com/software/sundev/suncc/faqs/cpp.html#0q3
Here is a (very dirty) sed script I use in my
configure.in in order to make libtool work:
s/compiler_o_lo="no"/compiler_o_lo="yes"/
s%$show "$mv $output_obj $libobj"%\#%
s%$show "$mv $libobj $obj"%\#%
s%$show "$mv $output_obj $obj"%\#%
s%$show "$mv $libobj $lo_libobj"%\#%
s%$run $mv $output_obj $libobj%test "x" = "x"%
s%$run $mv $libobj $obj%test "x" = "x"%
s%$run $mv $output_obj $obj%test "x" = "x"%
s%$run $mv $libobj $lo_libobj%test "x" = "x"%
s%\*\.lo) libobjs="\$libobjs \$arg"%\*\.lo)
libobjs="\$libobjs \$objdir/\$arg"%
As you can see, this sed script solves three problems:
1) It sets compiler_o_lo to yes, even though
aclocal.m4 believes it should be no.
2) It removes the lines that mv any object files.
3) It puts $objdir/ in front of all object files when
linking.
Also, as detailed in the Sun Forte C++ User's Guide,
one should use CC -xar -o instead of ar and CC -g
instead of ld when linking C++ libraries. Otherwise,
templates are not instantiated.
Here is the code I use in my configure.in to
accomplish this. ISHOSTSUNCC is a variable I set
myself.
if test x$ISHOSTSUNCC = xyes; then
AR=CC;
AR_FLAGS="-xar -o";
LD=CC;
export AR AR_FLAGS LD
fi
dnl Invoke libtool
AC_PROG_LIBTOOL
Of course, one should not use the CC compiler as the
linker/archiver when linking C libraries. So there
are some language-related complexities involved here.
The Sun Forte C++ User's Guide can be found at:
http://docs.sun.com/db/doc/806-7991
The relevant sections are: Chapter 7 (especially
7.3.1), Chapter 16 (especially 16.2 and 16.3), Chapter
12.
If you need any other information, please contact me
off-list: address@hidden
Best regards,
Ulrik Petersen
Emdros maintainer, <http://www.emdros.org/>
=====
--
Ulrik Petersen, Denmark
Beskyt din computer mod virus og misbrug! Læs mere i Yahoo! Sikkerhedscenter på
www.yahoo.dk/sikkerhedscenter
- C++ shared libraries on Sun Forte compiler,
Ulrik Petersen <=