Я пытаюсь создать две библиотеки QObject, используя cmake на windows, где одна зависит от другой. Если я создаю их обе как библиотеки STATI C, это работает, но теперь, когда мне нужно собрать их как библиотеки SHARED, я продолжаю получать ошибки компиляции.
- ошибка LNK2001: неразрешенный внешний символ "publi c: stati c struct QMetaObject const A :: staticMetaObject "
Я компилирую с использованием Visual Studio 19.
Небольшой пример проблемного кода c:
Первая библиотека:
#include <QObject>
class A: public QObject
{
Q_OBJECT
public:
A(const QString& name){}
public Q_SLOTS:
void ASlot(){}
};
Вторая библиотека
#include "A.hpp"
class B: public A {
Q_OBJECT
public:
B():A("A"){}
private Q_SLOTS:
void BSlot(){}
};
CMakeLists.txt:
project(test)
cmake_minimum_required(VERSION 3.10)
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/Modules")
find_package(Qt5Core REQUIRED)
set(CMAKE_AUTOMOC ON)
add_library(A SHARED A.hpp)
target_link_libraries(A ${Qt5Core_LIBRARIES})
set_target_properties(A PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
add_library(B SHARED B.hpp)
target_link_libraries(B A ${Qt5Core_LIBRARIES})
Код проверен для работы на linux, поэтому я предполагаю, что это может быть проблемой с экспортом символов dll. Я попытался использовать qt5_wrap_ cpp () вместо automo c, но результат не отличается.
Я надеюсь, что кто-то может помочь мне с проблемой.