I just compiled gcc-4.0 with the fvisibility-inlines-hidden option, and I get undefined symbols when linking c++ code with libstdc++. For example this simple c++ file does not compile:
#include <string> #include <iostream> using namespace std; int main (void) { basic_string <char>a = "thing one"; string b = "thing two"; cout << a.c_str() << endl; return (a == b); } I get the following errors: tmp/ccK2jGQY.o(.text+0x24): In function `main': test.cpp: undefined reference to `std::allocator<char>::allocator()' /tmp/ccK2jGQY.o(.text+0x51):test.cpp: undefined reference to `std::allocator<char>::~allocator()' /tmp/ccK2jGQY.o(.text+0x6a):test.cpp: undefined reference to `std::allocator<char>::~allocator()' /tmp/ccK2jGQY.o(.text+0x75):test.cpp: undefined reference to `std::allocator<char>::allocator()' /tmp/ccK2jGQY.o(.text+0xa2):test.cpp: undefined reference to `std::allocator<char>::~allocator()' /tmp/ccK2jGQY.o(.text+0xb2):test.cpp: undefined reference to `std::allocator<char>::~allocator()' /tmp/ccK2jGQY.o(.text+0xbd):test.cpp: undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::c_str() const' /tmp/ccK2jGQY.o(.text+0xdd):test.cpp: undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))' /tmp/ccK2jGQY.o(.text+0x100):test.cpp: undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()' /tmp/ccK2jGQY.o(.text+0x113):test.cpp: undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()' /tmp/ccK2jGQY.o(.text+0x129):test.cpp: undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()' /tmp/ccK2jGQY.o(.text+0x142):test.cpp: undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()' /tmp/ccK2jGQY.o(.gnu.linkonce.t._ZSteqIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_[bool std::operator==<char, std::char_traits<char>, std::allocator<char> >(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)]+0x14): In function `bool std::operator==<char, std::char_traits<char>, std::allocator<char> >(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': test.cpp: undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::compare(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const' collect2: ld returned 1 exit status So it is not safe to compile gcc with the fvisibility-inlines-hidden option? Regards Papadakos Panagiotis