Я пытаюсь скомпилировать проект в Visual Studio, используя плагин Qt и библиотеку QCustomPlot. Код отлично работает в создателе QT, но когда я переношу код в Visual Studio (которую мне нужно использовать по несвязанным причинам), я получаю эту ошибку связывания:
Error LNK2019 unresolved external symbol "__declspec(dllimport) public: class QSharedPointer > __cdecl QCPStatisticalBox::data(void)const " (__imp_?data@QCPStatisticalBox@@QEBA?AV?$QSharedPointer@V?$QCPDataContainer@VQCPStatisticalBoxData@@@@@@XZ) referenced in function "public: void __cdecl mop_OUT::addord(double,char)" (?addord@mop_OUT@@QEAAXND@Z)
Обратите внимание: это НЕ проблема сбоя ссылки на файл lib или dll, который содержит определение. Пакет библиотеки QCustomPlot поставляется без таких файлов, только файл заголовка (qcustomplot.h) и исходный файл (qcustomplot.cpp).
Кроме того, отсутствующий символ уже имеет встроенное определение в строке 5673 файла qcustomplot.h:
QSharedPointer<QCPStatisticalBoxDataContainer> data() const { return mDataContainer; }
У кого-нибудь есть идеи относительно того, что у меня происходит?
__declspec
что означает? Конфигурация__declspec
часто выполняется с помощью магии макросов. (Примеры в Q/A SO: статическая переменная-член не является глобальной между исполняемым файлом и dll и SO: GetProcAddress vs __declspec(dllimport)). Насколько я знаю, Qt также использует аналогичную магию макросов. Я бы предположил, что в командной строке, где создается DLL, отсутствует определение (/D
). - person Scheff's Cat   schedule 07.05.2019g++
, ищите-D
, для MSVC вместо этого может быть/D
.) Проверьте, использует ли ваш проект VS те же определения. (Могут быть несвязанные определения с вашей проблемой - если вы чувствуете себя потерянным, вы можете расширить свой вопрос, чтобы получить помощь.) - person Scheff's Cat   schedule 07.05.2019