编译时,这个:
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(不知道那是什么))。功能似乎只给我一个预期的。 有人可以解释为什么会这样或者指出我的解释吗?
答案 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
部分有某种关联。负责将符号组合在一起。