Qt Quick 2:创建和添加共享库
Qt Quick 2 : Creating and adding a shared library
情况
我试图为我的项目创建一个 dll,但我不知道我做错了什么。
1 步骤:创建共享库
我去了create new project
->
library
->
c++ library
->
added some test method that returns a const int
->
built Realse and Debug versions
2 步骤:将库添加到我的项目
我所做的是:right click on my 'real' project
->
clicked on add Library
->
clicked on 'external library' option
->
in 'library path' section browsed to my .so file
->
Qt added auto-generated code to my .pro file
问题
我无法访问我图书馆中的 header。
这是我的 main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include "StickyNotesCore.h" // <- says error: file not found
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
const QUrl url(QStringLiteral("qrc:/main.qml"));
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
&app, [url](QObject *obj, const QUrl &objUrl) {
if (!obj && url == objUrl)
QCoreApplication::exit(-1);
}, Qt::QueuedConnection);
engine.load(url);
return app.exec();
}
我的stickynotescore.h
#ifndef STICKYNOTESCORE_H
#define STICKYNOTESCORE_H
#include "stickynotescore_global.h"
class STICKYNOTESCORESHARED_EXPORT StickyNotesCore
{
public:
StickyNotesCore();
int Test();
};
#endif // STICKYNOTESCORE_H
我的StickyNotes.pro
QT += quick
CONFIG += c++11
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Refer to the documentation for the
# deprecated API to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp
RESOURCES += qml.qrc
# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH =
# Additional import path used to resolve QML modules just for Qt Quick Designer
QML_DESIGNER_IMPORT_PATH =
QT_QUICK_CONTROLS_STYLE=material ./app
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../build-StickyNotesCore-Desktop_Qt_5_13_0_GCC_64bit-Debug/release/ -lStickyNotesCore
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../build-StickyNotesCore-Desktop_Qt_5_13_0_GCC_64bit-Debug/debug/ -lStickyNotesCore
else:unix: LIBS += -L$$PWD/../build-StickyNotesCore-Desktop_Qt_5_13_0_GCC_64bit-Debug/ -lStickyNotesCore
INCLUDEPATH += $$PWD/../build-StickyNotesCore-Desktop_Qt_5_13_0_GCC_64bit-Debug
DEPENDPATH += $$PWD/../build-StickyNotesCore-Desktop_Qt_5_13_0_GCC_64bit-Debug
编辑
文件夹树
对于您的 .pro 文件,将 INCLUDEPATH 和 DEPENDEPATH 替换为您的库的 .h 文件所在的路径。
确保在进行更改后运行 qmake
。
INCLUDEPATH += $$PWD/../build-StickyNotesCore-Desktop_Qt_5_13_0_GCC_64bit-Debug
DEPENDPATH += $$PWD/../build-StickyNotesCore-Desktop_Qt_5_13_0_GCC_64bit-Debug
这是我在 .pro 文件中的示例。
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../mylibrary/lib/vc140/x64/ -lMYLIBRARY
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../mylibrary/lib/vc140/x64/ -lMYLIBRARYd
else:unix: LIBS += -L$$PWD/../../../../../mylibrary/lib/vc140/Win32/ -lMYLIBRARY
INCLUDEPATH += $$PWD/../../../../../mylibrary/include
DEPENDPATH += $$PWD/../../../../../mylibrary/include
情况
我试图为我的项目创建一个 dll,但我不知道我做错了什么。
1 步骤:创建共享库
我去了create new project
->
library
->
c++ library
->
added some test method that returns a const int
->
built Realse and Debug versions
2 步骤:将库添加到我的项目
我所做的是:right click on my 'real' project
->
clicked on add Library
->
clicked on 'external library' option
->
in 'library path' section browsed to my .so file
->
Qt added auto-generated code to my .pro file
问题
我无法访问我图书馆中的 header。
这是我的 main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include "StickyNotesCore.h" // <- says error: file not found
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
const QUrl url(QStringLiteral("qrc:/main.qml"));
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
&app, [url](QObject *obj, const QUrl &objUrl) {
if (!obj && url == objUrl)
QCoreApplication::exit(-1);
}, Qt::QueuedConnection);
engine.load(url);
return app.exec();
}
我的stickynotescore.h
#ifndef STICKYNOTESCORE_H
#define STICKYNOTESCORE_H
#include "stickynotescore_global.h"
class STICKYNOTESCORESHARED_EXPORT StickyNotesCore
{
public:
StickyNotesCore();
int Test();
};
#endif // STICKYNOTESCORE_H
我的StickyNotes.pro
QT += quick
CONFIG += c++11
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Refer to the documentation for the
# deprecated API to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp
RESOURCES += qml.qrc
# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH =
# Additional import path used to resolve QML modules just for Qt Quick Designer
QML_DESIGNER_IMPORT_PATH =
QT_QUICK_CONTROLS_STYLE=material ./app
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../build-StickyNotesCore-Desktop_Qt_5_13_0_GCC_64bit-Debug/release/ -lStickyNotesCore
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../build-StickyNotesCore-Desktop_Qt_5_13_0_GCC_64bit-Debug/debug/ -lStickyNotesCore
else:unix: LIBS += -L$$PWD/../build-StickyNotesCore-Desktop_Qt_5_13_0_GCC_64bit-Debug/ -lStickyNotesCore
INCLUDEPATH += $$PWD/../build-StickyNotesCore-Desktop_Qt_5_13_0_GCC_64bit-Debug
DEPENDPATH += $$PWD/../build-StickyNotesCore-Desktop_Qt_5_13_0_GCC_64bit-Debug
编辑
文件夹树
对于您的 .pro 文件,将 INCLUDEPATH 和 DEPENDEPATH 替换为您的库的 .h 文件所在的路径。
确保在进行更改后运行 qmake
。
INCLUDEPATH += $$PWD/../build-StickyNotesCore-Desktop_Qt_5_13_0_GCC_64bit-Debug
DEPENDPATH += $$PWD/../build-StickyNotesCore-Desktop_Qt_5_13_0_GCC_64bit-Debug
这是我在 .pro 文件中的示例。
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../mylibrary/lib/vc140/x64/ -lMYLIBRARY
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../mylibrary/lib/vc140/x64/ -lMYLIBRARYd
else:unix: LIBS += -L$$PWD/../../../../../mylibrary/lib/vc140/Win32/ -lMYLIBRARY
INCLUDEPATH += $$PWD/../../../../../mylibrary/include
DEPENDPATH += $$PWD/../../../../../mylibrary/include