さまざまなIDLファイルから取得したDDSトピックの定義を含む静的ライブラリを構築しようとしています。私はミドルウェアとしてOpenDDSを使用しています。その後、スタティックライブラリでのテンプレートインスタンス化の防止
私はsequence<long>
を含むIDLファイルを作成し、私の静的ライブラリにコンパイルし、そして私のアプリケーションに対して静的ライブラリをリンクし、私は、シンボルの複数の定義を含むリンカエラーを取得:
Error LNK2005 "public: void __cdecl TAO::unbounded_value_sequence<int>::length(unsigned int)" ([email protected][email protected]@[email protected]@[email protected]) already defined in TAO.lib(TAO.dll)
私は信じています私の静的ライブラリにはunbounded_value_sequence
のテンプレートインスタンスが含まれており、私のアプリケーションにもインスタンス化が含まれているからです。 OpenDDSで使用されているACE TAOの中から来ているようです。
静的ライブラリでテンプレートをインスタンス化するのを避ける方法を探しています。そのため、アプリケーション内の定義を一緒にリンクして使用するだけです。私は、次を追加してみました:
extern template class TAO::unbounded_value_sequence<int>;
これは、次のエラー生成:
Error C2961 'TAO::unbounded_value_sequence<CORBA::Long>': inconsistent explicit instantiations, a previous explicit instantiation did not specify '__declspec(dllimport)'
を私はそのインスタンス化を見つけることを試みたが、そのない私のコードできました。それはACE自体の中にあるかもしれません。
1つのプロジェクトですべてをビルドすると問題は発生しませんが、理想的な解決策ではありません。