У меня есть класс, который получен из QObject
и QRunnable
, а также имеет макрос Q_OBJECT
. Библиотека, которая содержит компиляции классов, отлично, и я получаю файлы .lib
и .dll
. Я использую MSVC 2013 и QT 5.4 (предварительно скомпилированные двоичные файлы из qt.io).Qt5 нерешенная внешняя функция staticMetaObject
Глядя на DLL, используя Walker Dependency, я вижу, что функция есть. Файл get moc'ed, что означает, что я могу посмотреть на полученный CPP-файл. В качестве доказательства здесь есть функция, которая вызывает проблемы.
const QMetaObject DHImageConvHandler::staticMetaObject = {
{ &QObject::staticMetaObject, qt_meta_stringdata_DHImageConvHandler.data,
qt_meta_data_DHImageConvHandler, qt_static_metacall, Q_NULLPTR, Q_NULLPTR}
};
Теперь, когда я пытаюсь создать приложение, которое ссылается на эту библиотеку, я получаю следующую ошибку.
unresolved external symbol "public: static struct QMetaObject const DHImageConvHandler::staticMetaObject" ([email protected]@@[email protected]@B)
referenced in function "public: static class QString __cdecl DHImageConvHandler::tr(char const *,char const *,int)" ([email protected]@@[email protected]@[email protected])
Изменение типа проекта для библиотеки из «динамической библиотеки» на «Static Library» делает это уйти, но мне очень интересно, почему. Код находится в lib. Я открыл библиотеку импорта текстовым редактором и искал staticMetaObject
, и, как уже упоминалось ранее, Dependency Walker также показывает, что он есть.
Может ли кто-нибудь пролить свет на это?
Редактировать 10.01.2015 Я с ошибкой о том, кто использует библиотеку в вопросе. Этот lib связан с другой библиотекой, которая является частью приложения.
У вас есть правильно настроенные префиксы dllimport/dllexport? (Например, http://qt-project.org/faq/answer/when_creating_a_library_with_qt_windows_and_using_it_in_an_application_then). – Archie
Как я не нашел эту ссылку? В любом случае, да, эти операторы импорта присутствуют в коде, но на всякий случай я дважды проверю. –