太多的构造函数符号

时间:2015-09-23 11:25:56

标签: c++

编译时,这个:

template <typename T>
struct ConstArray {
///MEMBERS
    T* data_;
    T* end_;

///Constructors
    ConstArray(T* data, T* end) : data_(data), end_(end) {}
};

template struct ConstArray<const char>;

给了我(nm -C *.o):

0000000000000000 W ConstArray<char const>::ConstArray(char const*, char const*)
0000000000000000 W ConstArray<char const>::ConstArray(char const*, char const*)
0000000000000000 n ConstArray<char const>::ConstArray(char const*, char const*)

对于我定义的每个构造函数,我似乎得到三个符号(2 W + 1 n(不知道那是什么))。功能似乎只给我一个预期的。 有人可以解释为什么会这样或者指出我的解释吗?

1 个答案:

答案 0 :(得分:0)

也许我可以看到为什么这些符号会出现在nm输出中,但我不知道它是否应该/不应该存在以及n到底意味着什么。也许如果有人熟悉这个,他可以发表完整的答案。

如果您制作objdump -t ./obj.o,则可以看到符号表。除了2个构造函数和许多其他符号,我看到

00000000 l       .group 00000000 _ZN10ConstArrayIKcEC5EPS0_S2_

那里。该标志仅为l,这意味着它是本地的而不是调试,因此我在nm输出中将其视为第三个符号。

如果我nm -g ./obj.o仅查看外部符号,我只会看到2个W构造函数,当我nm -a ./obj.o时,我会看到所有符号并在objdump -x中标记为debug。我还看到一些n的调试符号 - 在nm -a输出中标记。

所以我不知道n的含义,但第三个符号与.group文件的elf部分有某种关联。负责将符号组合在一起。