Ссылка на SHARED Q_OBJECT: неразрешенный внешний символ "publi c: stati c struct QMetaObject const A :: staticMetaObject" - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь создать две библиотеки 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, но результат не отличается.

Я надеюсь, что кто-то может помочь мне с проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...