2016-09-29 4 views
0

私はいくつかのファイルから動的ライブラリを作成する(他の誰かの)コードに取り組んでいます。 ファイル "MyStaticVector.h"には、固定(テンプレート化)された長さの静的ベクトルの定義/実装が含まれています。リンカーエラー。構造体の静的変数が見つかりません

これはライブラリ(Windowsでは.dll、Linuxでは.so)にコンパイルされます。コンパイル/リンクは正常に実行されます。

MyStaticVector.h: 
---------------- 

template< unsigned VectorLength > 
struct MyStaticVector 
{ 
    static const unsigned uNumberOfElements = VectorLength; 

    MyStaticVector() 
    { 
    } 
} 

私の問題は、これはMSVC11/debug + releaseとGCC/releaseで動作するということです。しかし、GCC/debugを使用すると、実行時にエラーが発生し、、 "uNumberOfElements"のシンボルが見つかりません。あなたは説明することができます、なぜですか?

+0

gccのどのバージョンですか?どのコンパイラフラグ? –

答えて

1

コンパイル時にテンプレートパラメータを設定する必要があります(この場合、DLLのコンパイル時)。これは、テンプレートの各インスタンスが異なるクラスになるためです。この時点で、必要な値ごとにシンボル 'uNumberOfElements'が作成されます。

コンパイル時に存在しなかったクラス(またはテンプレートインスタンス)を使用しようとすると、作成していないクラスを使用しようとします。存在する。

関連する問題