Я создал невероятно простой контейнер (чуть больше, чем struct) в качестве простого теста шаблонов и библиотек на c ++. Он содержит произвольный тип данных и отслеживает его наиболее ценный член и то, изменились ли данные с момента последнего обращения к нему, и содержится в крошечной .dll, сгенерированной новейшим компилятором msvc. Все, что я хочу сделать, это связать эту библиотеку с другим проектом в Qt Creator, который я настроил для использования msvc в качестве компилятора (мне нужно использовать Qt для эффективного взаимодействия с файлами .ui). Я получаю неразрешенный внешний символ для каждой функции в вызываемом объекте, например, :
LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall collectionContainer<int>::collectionContainer<int>(int *,short,long)" (__imp_??0?$collectionContainer@H@@QAE@PAHFJ@Z) referenced in function _main
Я не уверен, что делать здесь, так как у меня сложилось впечатление, что это именно те символы, которые я должен ожидать при экспорте библиотеки.
Все функции имеют CONTAINER_API, определенный обычным способом, которым Visual Studio условно импортирует / экспортирует функции. Я уверен, что просто что-то неправильно истолковал, но у меня заканчиваются идеи.
Интересно, не имеет ли эта ошибка никакого отношения к DLL, и это просто случай, когда не помещать реализацию шаблона в заголовочный файл. Увидеть Вот
Других решений пока нет …