链接。如何同时定义和定义符号?

时间:2015-09-11 08:03:53

标签: c++ linker

$ nm --demangle /usr/bin/../lib/gcc/x86_64-linux-gnu/4.9/libsupc++.a  | grep "__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()
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()

那么,如何解释这个输出?

  1. 这是符号的多个定义(三个T) - 它是怎么回事?为什么链接器会生成违反ODR的库?什么目的?为什么他们都有相同(和奇怪)的地址(0000000000000000)?
  2. 如何同时定义同一个符号(T)和未定义(U)?

0 个答案:

没有答案