Hi!

I'm currently fighting with deb symbols files for a C++ library I'm
packaging, and I'd like to get some insight in how others are coping
with this task. In particular, I wonder how to get rid of symbols from
standard template instances that leak into the ABI, eg.

$ cat test.cpp 
#include <string>

std::string foome(const std::string& bar)
{
        return "foo" + bar + "foo";
}

$ g++ -fPIC -c test.cpp
$ readelf -Wds test.o | grep -v UND | grep -v HIDDEN | grep -E
'(FUNC|OBJECT)'
    18: 0000000000000000    23 FUNC    WEAK   DEFAULT    9 
_ZNSt11char_traitsIcE6lengthEPKc
    22: 0000000000000000   155 FUNC    WEAK   DEFAULT   11 
_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6_
    30: 0000000000000000   104 FUNC    WEAK   DEFAULT   14 
_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_PKS3_
    33: 0000000000000000   124 FUNC    GLOBAL DEFAULT    5 _Z5foomeRKSs

I can hide the operator+() and related instances from with a version
script, of course, but due to C++ name mangling they tend to be
arch-specific and thus hard to maintain. Does anyone know of a more
lightweight solution to limit visibility of template instances and
ensure a clean ABI for C++ libraries? What are the current best
practises when writing symbols files for C++ libraries, or is it simply
not recommended?

Regards,

Daniel.


-- 
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to