在 QML 应用程序中使用预编译插件(通过共享库)
Use a precompiled plugin (via a shared library) in a QML application
我有一个由 another project 编译的 QML 插件(.so
)。我想在我自己的 QML 应用程序中重新使用它,而不是每次都重新构建它。我想复制 .so
并用最少的附加代码编写:
import QQuickMapboxGL 1.0
在我的 QML 文件的顶部让它工作。
在我的QML项目中我需要在哪里复制.so
,我需要如何将它添加到项目中以便QML运行时可以找到它?
我尝试过的:
- 创建一个
QQuickMapboxGL
目录,其中包含 libqmapboxgl.so
。
在该目录中创建一个 qmldir
文件,内容如下:
plugin qmapboxgl
将以下内容添加到我的 .pro
文件中:
INSTALL_DIR = $$PWD/../install
target.path = $$INSTALL_DIR
# Copy the QQuickMapboxGL folder to the install directory
plugin.files = QQuickMapboxGL/*
plugin.path = $$INSTALL_DIR/QQuickMapboxGL
INSTALLS += target plugin
添加一个 make install
构建步骤。
这次疯狂黑客攻击的结果是:
plugin cannot be loaded for module "QQuickMapboxGL": Plugin verification data mismatch in '/my/build/QQuickMapboxGL/libqmapboxgl.so'
我已验证该插件和我的应用程序都是使用相同版本的 g++ (g++-5 (Ubuntu 5.4.1-2ubuntu1~14.04) 5.4.1 20160904
) 和相同的 Qt 下载 (5.7.0) 编译的。
主要问题是 .so
不是 QML 插件;没有 class 继承自 QQmlExtensionPlugin
或相关。它只是一个共享代码库。
能够通过以下方式解决此问题:
- 将 MapboxGL 的头文件添加到我的项目中
- 在我的
main.cpp
中:
#include "3rdparty/mapbox-gl-native/platform/qt/include/qmapbox.hpp"
- 正在调用
QMapbox::registerTypes();
(在 main
内)
- 复制
libmapboxgl.so
(通过 Mapbox 的 make/cmake 构建)到 libs
目录中。
- 在
myproject.pro
中加入:LIBS += -L./libs -lqmapboxgl
- 在我的 QML 代码中
import QQuickMapboxGL 1.0
然后使用 MapboxMap
- 正在将
libmapboxgl.so
复制到 LD_LIBRARY_PATH
引用的某个地方
我有一个由 another project 编译的 QML 插件(.so
)。我想在我自己的 QML 应用程序中重新使用它,而不是每次都重新构建它。我想复制 .so
并用最少的附加代码编写:
import QQuickMapboxGL 1.0
在我的 QML 文件的顶部让它工作。
在我的QML项目中我需要在哪里复制.so
,我需要如何将它添加到项目中以便QML运行时可以找到它?
我尝试过的:
- 创建一个
QQuickMapboxGL
目录,其中包含libqmapboxgl.so
。 在该目录中创建一个
qmldir
文件,内容如下:plugin qmapboxgl
将以下内容添加到我的
.pro
文件中:INSTALL_DIR = $$PWD/../install target.path = $$INSTALL_DIR # Copy the QQuickMapboxGL folder to the install directory plugin.files = QQuickMapboxGL/* plugin.path = $$INSTALL_DIR/QQuickMapboxGL INSTALLS += target plugin
添加一个
make install
构建步骤。
这次疯狂黑客攻击的结果是:
plugin cannot be loaded for module "QQuickMapboxGL": Plugin verification data mismatch in '/my/build/QQuickMapboxGL/libqmapboxgl.so'
我已验证该插件和我的应用程序都是使用相同版本的 g++ (g++-5 (Ubuntu 5.4.1-2ubuntu1~14.04) 5.4.1 20160904
) 和相同的 Qt 下载 (5.7.0) 编译的。
主要问题是 .so
不是 QML 插件;没有 class 继承自 QQmlExtensionPlugin
或相关。它只是一个共享代码库。
能够通过以下方式解决此问题:
- 将 MapboxGL 的头文件添加到我的项目中
- 在我的
main.cpp
中:#include "3rdparty/mapbox-gl-native/platform/qt/include/qmapbox.hpp"
- 正在调用
QMapbox::registerTypes();
(在main
内)
- 复制
libmapboxgl.so
(通过 Mapbox 的 make/cmake 构建)到libs
目录中。 - 在
myproject.pro
中加入:LIBS += -L./libs -lqmapboxgl
- 在我的 QML 代码中
import QQuickMapboxGL 1.0
然后使用MapboxMap
- 正在将
libmapboxgl.so
复制到LD_LIBRARY_PATH
引用的某个地方