Я пытаюсь создать статическую библиотеку, содержащую определения тем DDS, полученных из различных файлов IDL. Я использую OpenDDS в качестве своего промежуточного программного обеспечения.Предотвращение экземпляров шаблонов в статической библиотеке
Когда я создаю файл IDL, содержащий sequence<long>
, скомпилировать его в мою статическую библиотеку, а затем связать статическую библиотеку против моего приложения, я получаю сообщение об ошибке компоновщика с участием множественного определения символов:
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
, и мое приложение также содержит экземпляр. Кажется, это происходит из ACE TAO, который используется OpenDDS.
Я ищу способ избежать создания экземпляра шаблона в моей статической библиотеке в целом, чтобы он мог просто использовать определение в приложении, когда они связаны друг с другом. Я попытался добавить следующее:
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.
Проблема не возникает, если я строю все в одном проекте, но это не идеальное решение.