我有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
构建步骤。
这个疯狂的hackery的结果是:
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)进行编译。
答案 0 :(得分:0)
主要问题是.so
不是QML插件;没有类继承自QQmlExtensionPlugin
或相关。它只是一个共享的代码库。
能够通过以下方式解决此问题:
main.cpp
中:
#include "3rdparty/mapbox-gl-native/platform/qt/include/qmapbox.hpp"
QMapbox::registerTypes();
(在main
内)libmapboxgl.so
目录中复制libs
(通过Mapbox' make / cmake构建)。myproject.pro
添加:LIBS += -L./libs -lqmapboxgl
import QQuickMapboxGL 1.0
中,然后使用MapboxMap
libmapboxgl.so
复制到LD_LIBRARY_PATH