Класс регистратора похож на
Код: Выделить всё
class LPLOGGER_EXPORT Logger : public QObject {
Q_OBJECT
/*...*/
};
Код: Выделить всё
dumpbin /EXPORTS lpLibs\lpLogger\Debug\lpLogger.lib
Microsoft (R) COFF/PE Dumper Version 14.29.30159.0
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file lpLibs\lpLogger\Debug\lpLogger.lib
File Type: LIBRARY
Exports
ordinal name
??0ErrorBuilder@@QEAA@HAEBVQLoggingCategory@@@Z (public: __cdecl ErrorBuilder::ErrorBuilder(int,class QLoggingCategory const &))
??0ErrorBuilder@@QEAA@W4QtMsgType@@AEBVQString@@@Z (public: __cdecl ErrorBuilder::ErrorBuilder(enum QtMsgType,class QString const &))
?staticMetaObject@Logger@@2UQMetaObject@@B (public: static struct QMetaObject const Logger::staticMetaObject)
Код: Выделить всё
Searching lpLibs\lpLogger\Debug\lpLogger.lib:
Found "public: __cdecl ErrorBuilder::ErrorBuilder(enum QtMsgType,class QString const &)" (??0ErrorBuilder@@QEAA@W4QtMsgType@@AEBVQString@@@Z)
Referenced in filelistdownloader.cpp.obj
Loaded lpLogger.lib(lpLogger.dll)
Found "public: __cdecl ErrorBuilder::ErrorBuilder(int,class QLoggingCategory const &)" (??0ErrorBuilder@@QEAA@HAEBVQLoggingCategory@@@Z)
Referenced in filelistdownloader.cpp.obj
Referenced in utils.cpp.obj
Loaded lpLogger.lib(lpLogger.dll)
Код: Выделить всё
error LNK2001: unresolved external symbol "public: static struct QMetaObject const Logger::staticMetaObject" (?staticMetaObject@Logger@@2UQMetaObject@@B)
Примечание: MinGW без проблем собирает тот же проект.
UPD1: Это становится все более и более загадочным. Вот (не очень) минимальный пример.
Я отклонил все «недопустимые экспорты» или «нет, я не экспортирую статические поля» BS, потому что проект начался с qmake и msvc, и здесь не было никаких проблем. Затем я перешел на CMake, MinGW и Qt6 без особого тестирования сборок MSVC.
Итак, я сделал самую глупую, но эффективную вещь, которую мог. Я обновил файлы проекта qmake. И сборка прошла успешно.
Итак, мой следующий шаг — удалить все параметры компоновщика, чтобы найти виновника. Оставайтесь с нами.
UPD2: решено.
Может быть, это я, может быть, это ошибка в cmake, но определение частной библиотеки переходило из подпроекта logger в подпроект «инструменты». И я имею это в виду. Я использую файл common.cmake с общими действиями над локальными переменными (например, импорт Qt и локальных библиотек, проверка существования всех исходных файлов и т. д.). Каждая библиотека определяет свой собственный локальный
Код: Выделить всё
project(logger LANGUAGES C CXX)
set(LP_PRIVATE_DEFINE "LPLOGGER_LIBRARY")
Код: Выделить всё
target_compile_definitions(${PROJECT_NAME} PRIVATE "${LPLOGGER_LIBRARY}")
Код: Выделить всё
if(LP_PRIVATE_DEFINE)
message(STATUS "Private defines: ${LP_PRIVATE_DEFINE}")
foreach(DEP IN LISTS LP_PRIVATE_DEFINE)
target_compile_definitions(${PROJECT_NAME} PRIVATE "-D${DEP}")
endforeach()
endif()
Подробнее здесь: https://stackoverflow.com/questions/798 ... ol-present
Мобильная версия