clone 429600 -1
reassign -1 libtool
retitle -1 -export-symbols doesn't work with C++
found -1 1.5.6-6
thanks

On Mon, Jun 18, 2007 at 10:46:52PM +0200, Aurelien Jarno wrote:
> As we discussed shortly yesterday, there is a problem while building
> dh_makeshlibs on armel. Here is the end of the build log:

> dh_fixperms
> dh_fixperms: Compatibility levels before 4 are deprecated.
> perl ./debian/dh_makeshlibs -X lib/odbc/lib -a
> dh_makeshlibs: Compatibility levels before 4 are deprecated.
> Error: incorrect soname libodbcinstQ.so.1, missing symbol: Base        
> QGList::count() const
> make: *** [binary-arch] Error 255

> The QGList::count() symbols comes from Qt 3. This function is defined as
> inlined in the header file, but strangely it is inlined only on armel.

Ultimately, this is a bug in either libtool or binutils.  UnixODBC upstream
already uses libtool's -export-symbols option for all of its libraries, but
whereas for C libraries this option is mapped to -Wl,--version-script, for
C++ libraries it's mapped to -Wl,-retain-symbols-file; and in spite of being
documented in ld(1), -retain-symbols-file appears to have no effect on the
resulting binary.

I know of no reason why g++ couldn't use -Wl,--version-script the same as is
used for C libraries; and indeed, the attached local patch to
AC_LIBTOOL_LANG_CXX_CONFIG fixes this problem with the resulting
libodbcinstQ.

Cheers,
-- 
Steve Langasek                   Give me a lever long enough and a Free OS
Debian Developer                   to set it on, and I can move the world.
[EMAIL PROTECTED]                                   http://www.debian.org/
--- libtool-1.5.22.orig/libtool.m4
+++ libtool-1.5.22/libtool.m4
@@ -2821,8 +2821,13 @@
   # archiving commands below assume that GNU ld is being used.
   if test "$with_gnu_ld" = yes; then
     _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-
+    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}--retain-symbols-file $wl$export_symbols -o $lib'
+    if test $supports_anon_versioning = yes; then
+      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~
+      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+      $echo "local: *; };" >> $output_objdir/$libname.ver~
+      $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+    fi
     _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
     _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
 

Reply via email to