无法获取库的枚举(未定义引用 staticMetaObject)
Can't get enumeration on library (undefined reference staticMetaObject)
我有一个使用 Qt 库(共享库)的应用程序。在我的库中,我有一个 class,其中有几个我想在主应用程序上使用的枚举。
我构建我的库项目没有问题,但是当我构建主应用程序项目时,出现错误:
moc_myapp.cpp:-1: erreur : undefined reference to `MyClass::staticMetaObject'
我没有找到关于这个错误的信息。
这是我的 Biblio.pro
QT -= gui
QT += quick multimedia network
TARGET = MyBiblio
TEMPLATE = lib
DEFINES += MYBIBLIO_LIBRARY
SOURCES += myBiblio.cpp
HEADERS += myBiblio.h\
myBiblio_global.h \
myClass.h
这个 myClass.h :
#ifndef MYCLASS_H
#define MYCLASS_H
#include <QObject>
class MyClass : public QObject
{
Q_OBJECT
public:
enum MyEnumeration {Enum1, Enum2, Enum3};
Q_ENUMS(MyEnumeration)
};
#endif // MYCLASS_H
和 myApp.pro :
TEMPLATE = app
QT += qml quick multimedia network widgets sql xml
SOURCES += main.cpp \
myapp.cpp
HEADERS += \
myapp.h
RESOURCES += qml.qrc
# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH =
# Default rules for deployment.
include(deployment.pri)
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/pathTo/build-MyBiblio_Qt_5_2_1/release/ -lMyBiblio
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/pathTo/build-MyBiblio_Qt_5_2_1/debug/ -lMyBiblio
INCLUDEPATH += $$PWD/pathTo/MyBiblio
DEPENDPATH += $$PWD/pathTo/MyBiblio
在 myapp.cpp 上,我使用库的枚举定义:
MyClass::MyEnumeration
我包括 "myclass.h"
我在 Windows.
下使用 Qt 5.2
感谢您的帮助
创建您想要 link 反对的共享库时,您需要确保在创建库时正确导出要在库外使用的符号。并随后在您 link 对库进行访问时导入。这可以使用 Q_DECL_EXPORT
和 Q_DECL_IMPORT
来完成
您的 lib pro 中已经有以下定义:
DEFINES += MYBIBLIO_LIBRARY
修改你的myClass.h如下:
#if defined MYBIBLIO_LIBRARY
#define MYBIBLIO_LIBRARY_DLLSPEC Q_DECL_EXPORT
#else
#define MYBIBLIO_LIBRARY_DLLSPEC Q_DECL_IMPORT
#endif
class MYBIBLIO_LIBRARY_DLLSPEC MyClass : public QObject
{
请阅读 How to create a library with Qt and use it in an application 了解更多信息。
我有一个使用 Qt 库(共享库)的应用程序。在我的库中,我有一个 class,其中有几个我想在主应用程序上使用的枚举。 我构建我的库项目没有问题,但是当我构建主应用程序项目时,出现错误:
moc_myapp.cpp:-1: erreur : undefined reference to `MyClass::staticMetaObject'
我没有找到关于这个错误的信息。
这是我的 Biblio.pro
QT -= gui
QT += quick multimedia network
TARGET = MyBiblio
TEMPLATE = lib
DEFINES += MYBIBLIO_LIBRARY
SOURCES += myBiblio.cpp
HEADERS += myBiblio.h\
myBiblio_global.h \
myClass.h
这个 myClass.h :
#ifndef MYCLASS_H
#define MYCLASS_H
#include <QObject>
class MyClass : public QObject
{
Q_OBJECT
public:
enum MyEnumeration {Enum1, Enum2, Enum3};
Q_ENUMS(MyEnumeration)
};
#endif // MYCLASS_H
和 myApp.pro :
TEMPLATE = app
QT += qml quick multimedia network widgets sql xml
SOURCES += main.cpp \
myapp.cpp
HEADERS += \
myapp.h
RESOURCES += qml.qrc
# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH =
# Default rules for deployment.
include(deployment.pri)
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/pathTo/build-MyBiblio_Qt_5_2_1/release/ -lMyBiblio
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/pathTo/build-MyBiblio_Qt_5_2_1/debug/ -lMyBiblio
INCLUDEPATH += $$PWD/pathTo/MyBiblio
DEPENDPATH += $$PWD/pathTo/MyBiblio
在 myapp.cpp 上,我使用库的枚举定义:
MyClass::MyEnumeration
我包括 "myclass.h"
我在 Windows.
下使用 Qt 5.2感谢您的帮助
创建您想要 link 反对的共享库时,您需要确保在创建库时正确导出要在库外使用的符号。并随后在您 link 对库进行访问时导入。这可以使用 Q_DECL_EXPORT
和 Q_DECL_IMPORT
您的 lib pro 中已经有以下定义:
DEFINES += MYBIBLIO_LIBRARY
修改你的myClass.h如下:
#if defined MYBIBLIO_LIBRARY
#define MYBIBLIO_LIBRARY_DLLSPEC Q_DECL_EXPORT
#else
#define MYBIBLIO_LIBRARY_DLLSPEC Q_DECL_IMPORT
#endif
class MYBIBLIO_LIBRARY_DLLSPEC MyClass : public QObject
{
请阅读 How to create a library with Qt and use it in an application 了解更多信息。