$ nm --demangle /usr/bin/../lib/gcc/x86_64-linux-gnu/4.9/libsupc++.a | grep "__cxxabiv1::__class_type_info::~__class_type_info"
gives following output:
0000000000000000 T __cxxabiv1::__class_type_info::~__class_type_info()
0000000000000000 T __cxxabiv1::__class_type_info::~__class_type_info()
0000000000000000 T __cxxabiv1::__class_type_info::~__class_type_info()
U __cxxabiv1::__class_type_info::~__class_type_info()
U __cxxabiv1::__class_type_info::~__class_type_info()
So, how to interpret this output?
- Here is multiple definitions of the symbol (three
T
's) - how it could be? Why linker produced such library with violatedODR
? What is the purpose? And why all of them have the same (and strange) address (0000000000000000
)? - How the same symbol could be both defined (
T
) and undefined (U
) simultaneously?