неопределенная ссылка на класс-конструктор и метод в qt - PullRequest
0 голосов
/ 04 мая 2020

У меня ниже ошибка в моем приложении qt quick, когда я хочу запустить его на android, но на windows ошибки нет.

:-1: error: linker command failed with exit code 1 (use -v to see invocation)
moc_usermanager.cpp:-1: error: error: undefined reference to 'ListManager::staticMetaObject'
moc_sharemanager.cpp:-1: error: error: undefined reference to 'ListManager::staticMetaObject'
:-1: error: linker command failed with exit code 1 (use -v to see invocation)

Скомпилировать вывод

:\Utils\Android\android-ndk-r19c/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a C:/Qt/5.12.5/android_armv7/lib/libQt5Quick.so C:/Qt/5.12.5/android_armv7/lib/libQt5Widgets.so C:/Qt/5.12.5/android_armv7/lib/libQt5Multimedia.so C:/Qt/5.12.5/android_armv7/lib/libQt5WebView.so C:/Qt/5.12.5/android_armv7/lib/libQt5Gui.so C:/Qt/5.12.5/android_armv7/lib/libQt5AndroidExtras.so C:/Qt/5.12.5/android_armv7/lib/libQt5Qml.so C:/Qt/5.12.5/android_armv7/lib/libQt5Network.so C:/Qt/5.12.5/android_armv7/lib/libQt5Core.so -lGLESv2  -LD:\android-ndk-r20b/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a D:\android-ndk-r20b/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++.so.16 -llog -lz -lm -ldl -lc
D:/QtProjects/build-ApplicationName-Android_ARMv7-Release/JooyaHokm/../LoginManaging//libLoginManaging.a(usermanager.obj):usermanager.cpp:function UserManager::UserManager(QObject*): error: undefined reference to 'ListManager::ListManager(QObject*)'
D:/QtProjects/build-ApplicationName-Android_ARMv7-Release/JooyaHokm/../LoginManaging//libLoginManaging.a(usermanager.obj):usermanager.cpp:function UserManager::UserManager(QObject*): error: undefined reference to 'ListManager::setTakeCount(int)'
D:/QtProjects/build-ApplicationName-Android_ARMv7-Release/JooyaHokm/../LoginManaging//libLoginManaging.a(usermanager.obj):usermanager.cpp:function UserManager::getList(): error: undefined reference to 'ListManager::listHasCompeleted()'
D:/QtProjects/build-ApplicationName-Android_ARMv7-Release/JooyaHokm/../LoginManaging//libLoginManaging.a(usermanager.obj):usermanager.cpp:function UserManager::getList(): error: undefined reference to 'ListManager::skipCount()'
D:/QtProjects/build-ApplicationName-Android_ARMv7-Release/JooyaHokm/../LoginManaging//libLoginManaging.a(usermanager.obj):usermanager.cpp:function UserManager::getList(): error: undefined reference to 'ListManager::takeCount()'
D:/QtProjects/build-ApplicationName-Android_ARMv7-Release/JooyaHokm/../LoginManaging//libLoginManaging.a(usermanager.obj):usermanager.cpp:function UserManager::getListFinishded(): error: undefined reference to 'ListManager::setListHasCompeleted(bool)'
D:/QtProjects/build-ApplicationName-Android_ARMv7-Release/JooyaHokm/../LoginManaging//libLoginManaging.a(usermanager.obj):usermanager.cpp:function UserManager::getListFinishded(): error: undefined reference to 'ListManager::setLastTakedCount(int)'
D:/QtProjects/build-ApplicationName-Android_ARMv7-Release/JooyaHokm/../LoginManaging//libLoginManaging.a(moc_usermanager.obj):moc_usermanager.cpp:function UserManager::qt_metacast(char const*): error: undefined reference to 'ListManager::qt_metacast(char const*)'
D:/QtProjects/build-ApplicationName-Android_ARMv7-Release/JooyaHokm/../LoginManaging//libLoginManaging.a(moc_usermanager.obj):moc_usermanager.cpp:function UserManager::qt_metacall(QMetaObject::Call, int, void**): error: undefined reference to 'ListManager::qt_metacall(QMetaObject::Call, int, void**)'
D:/QtProjects/build-ApplicationName-Android_ARMv7-Release/JooyaHokm/../LoginManaging//libLoginManaging.a(moc_usermanager.obj):moc_usermanager.cpp:UserManager::staticMetaObject: error: undefined reference to 'ListManager::staticMetaObject'

D:/QtProjects/build-ApplicationName-Android_ARMv7-Release/JooyaHokm/../LoginManaging//libLoginManaging.a(baseuser.obj):baseuser.cpp:function BaseUser::loadFromJson(QByteArray): error: undefined reference to 'UserRolesExtensions::UserRolesExtensions(QObject*)'
D:/QtProjects/build-ApplicationName-Android_ARMv7-Release/JooyaHokm/../LoginManaging//libLoginManaging.a(baseuser.obj):baseuser.cpp:function BaseUser::loadFromJson(QByteArray): error: undefined reference to 'UserRolesExtensions::convertToVariantList(QList<UserRoles::UserRolesEnum>)'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [libJooyaHokm.so] Error 1
make[1]: Leaving directory `D:/QtProjects/build-ApplicationName-Android_ARMv7-Release/JooyaHokm'
make: *** [sub-JooyaHokm-make_first] Error 2
21:43:59: The process "D:\android-ndk-r20b\prebuilt\windows-x86_64\bin\make.exe" exited with code 2.
Error while building/deploying project ApplicationName(kit: Android for armeabi-v7a (Clang Qt 5.12.5 for Android ARMv7))
When executing step "Make"
21:43:59: Elapsed time: 00:37.

UserManager. cpp

#include "usermanager.h"

UserManager::UserManager(QObject *parent) : ListManager(parent)
{
    setTakeCount(15);
}

void UserManager::getList()
{

}

void UserManager::getListFinishded()
{

}

UserListModel *UserManager::listModel()
{
    return &m_ListModel;
}

UserManager.h

#ifndef USERMANAGER_H
#define USERMANAGER_H

#include <QObject>
#include<jooyanetwork.h>
#include<QImage>
#include<jooyaimage.h>
#include<userlistmodel.h>
#include<QJsonArray>
#include<user.h>
#include<listmanager.h>

class UserManager : public ListManager
{
    Q_OBJECT
    Q_PROPERTY(UserListModel* listModel READ listModel CONSTANT)    
public:
    explicit UserManager(QObject *parent = nullptr);

    Q_INVOKABLE void getList();
    UserListModel* listModel();
signals:
private slots:
    void getListFinishded();
private:
    UserListModel m_ListModel;
};

#endif // USERMANAGER_H

1 Ответ

0 голосов
/ 08 мая 2020

После долгого времени и путаницы в течение нескольких дней я решил проблему с регистрацией типа ListManager

Я думаю, что Qt должен предоставить больше помощи разработчику для этих ошибок: <</p>


    qmlRegisterType<ListManager>("CompanyName",1,0,"ListManager");
...