2015-09-23 13 views
5

、この:が多すぎコンストラクタシンボルコンパイルすると

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*) 

私は3つのシンボル(2 W + 1からnを(取得するように見えるのか分かりませんそれは)私が定義する各コンストラクタについてです。関数は、私が期待どおりの1つを与えるように見えます。 誰かがこれがなぜか説明してください、または説明を教えてください。

+7

関連:http://stackoverflow.com/questions/6921295/dual-emission-of-constructor-symbols – Michael

+0

yepp、それがhttps://www.google.com/search?q=multiple+constructorsに見つかりました+生成され、どこか別の大きな答えがあった、私はちょうど使用する検索語を知らない。 –

+0

@Michaelありがとうございました。この質問は、説明できないn記号まで重複しています。 – PSkocik

答えて

0

おそらく私はこのシンボルがnmの出力に現れる理由を知ることができますが、正確にはnの意味を知ることはできません。たぶん、誰かがこれに精通している場合、彼は完全な答えを投稿することができます。

objdump -t ./obj.oにすると、シンボルテーブルが表示されます。 2つのコンストラクタと他の多くのシンボルを除き、

00000000 l  .group 00000000 _ZN10ConstArrayIKcEC5EPS0_S2_ 

があります。フラグはlで、ローカルでデバッグされていないことを意味しているので、nmの出力を3番目のシンボルとして参照してください。

私は唯一の外部シンボルを参照するnm -g ./obj.oをすれば、私は唯一の2 Wコンストラクタを見て、私はnm -a ./obj.oを行うときに、私はすべてのシンボルを見てもdebugなどobjdump -xでマーク。また、nm -a出力にn -flaggedのデバッグシンボルがいくつか表示されています。

だから私は何n手段を知らないが、第3のシンボルはelfファイルの.groupセクションに何らかの形で関係しています。シンボルをまとめてグループ化します。

関連する問題