http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51813

             Bug #: 51813
           Summary: -fvisibility=hidden causes std::codecvt members to be
                    undefined
    Classification: Unclassified
           Product: gcc
           Version: 4.7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: s...@s-e-f-i.de


The following program causes undefined symbols when -fvisibility=hidden is
used:

#include <locale>

int main()
{
        std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t>
>(std::locale());
}

g++-4.7 -fvisibility=hidden test.cpp

/tmp/cclBRkzy.o: In function `main':
test.cpp:(.text+0x1d): undefined reference to `std::codecvt<wchar_t, char,
__mbstate_t> const& std::use_facet<std::codecvt<wchar_t, char, __mbstate_t>
>(std::locale const&)'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.0-alpha20120107/../../../../x86_64-pc-linux-gnu/bin/ld:
a.out: hidden symbol
`_ZSt9use_facetISt7codecvtIwc11__mbstate_tEERKT_RKSt6locale' isn't defined
/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.0-alpha20120107/../../../../x86_64-pc-linux-gnu/bin/ld:
final link failed: Bad value
collect2: error: ld returned 1 exit status

It works with gcc-4.6.2.
use_facet is only an example. I had other functions like do_length, the
destructor, etc. reported as undefined as well.

Reply via email to