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.