我正在尝试构建一个静态库,其中包含从各种 IDL 文件中获得的 DDS 主题的定义。我使用 OpenDDS 作为我的中间件。
当我创建一个包含sequence<long>
.
Error LNK2005 "public: void __cdecl TAO::unbounded_value_sequence<int>::length(unsigned int)" (?length@?$unbounded_value_sequence@H@TAO@@QEAAXI@Z) 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 内部。
如果我在一个项目中构建所有内容,则不会出现问题,但这不是一个理想的解决方案。