Использование QCustomPlot в Visual Studio, получение неразрешенной ошибки внешнего символа

Я пытаюсь скомпилировать проект в 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; }

У кого-нибудь есть идеи относительно того, что у меня происходит?


person Tommy Orok    schedule 07.05.2019    source источник
comment
Знаете ли вы о __declspec что означает? Конфигурация __declspec часто выполняется с помощью магии макросов. (Примеры в Q/A SO: статическая переменная-член не является глобальной между исполняемым файлом и dll и SO: GetProcAddress vs __declspec(dllimport)). Насколько я знаю, Qt также использует аналогичную магию макросов. Я бы предположил, что в командной строке, где создается DLL, отсутствует определение (/D).   -  person Scheff's Cat    schedule 07.05.2019
comment
Я не знаю QT Creator (кроме имени), но я уверен, что он где-то показывает командные строки компиляции. (Каждая известная мне IDE делает это.) Посмотрите на командные строки в QT Creator, какие аргументы фактически передаются для сборки DLL. (Если это g++, ищите -D, для MSVC вместо этого может быть /D.) Проверьте, использует ли ваш проект VS те же определения. (Могут быть несвязанные определения с вашей проблемой - если вы чувствуете себя потерянным, вы можете расширить свой вопрос, чтобы получить помощь.)   -  person Scheff's Cat    schedule 07.05.2019
comment
Может быть, лучше удалить ваш другой вопрос. Хотя я хотел бы упомянуть, что дублировать адреса (среди прочего) проблемы, о которой я подозревал в своих предыдущих комментариях: неправильный импорт/экспорт методов/ классы в модулях/dll (зависит от компилятора).   -  person Scheff's Cat    schedule 07.05.2019


Ответы (1)


Properties->Configuration Properties->Liker->Input->Additional Dependencice" добавить "Qt5PrintSupportd.lib" это работает

person lowbee    schedule 12.06.2020