首页| 论坛| 消息

标题:使用别人的静态构建Quick程序无法打开窗口
作者:彩阳
日期:2014-08-29 12:08
内容:

如题。我使用realfan静态编译的Qt SDK,然后新建一个Quick程序,使用Release模式进行静态编译构建,成功。
但是在资源管理器(Explorer)上打开的程序就无法运行窗口。无奈,在Qt Creator上测试运行。结果出现这样的调试信息:
QQmlApplicationEngine failed to load component
qrc:///qml/main.qml:2 module "QtQuick.Controls" is not installed
qrc:///qml/main.qml:1 module "QtQuick" is not installed
qrc:///qml/main.qml:2 module "QtQuick.Controls" is not installed
qrc:///qml/main.qml:1 module "QtQuick" is not installed
有谁遇到过这样的情况吗?


#1 [彩阳 08-29 12:11]
前面一段时间看了Qt的博客,介绍了如何通过修改插件的代码来减少静态链接Qt插件的个数最后减少生成Qt程序的大小。
博客地址在这里:请点击我
我只成功了一半,自己静态编译的程序还是依赖Qt SDK中的qml文件夹。没法完全stand alone。
#2 [彩阳 08-29 14:30]
去qt-project.org论坛上问问。
http://qt-project.org/forums/viewthread/46795/
#3 [彩阳 08-29 17:32]
在上面的帖子中,我已经找到了一个通融的方法,虽然这样可能不友好。
#include
#include
#include
#include
#if defined(QT_STATIC) && !defined(Q_OS_MAC) && !defined(QT_NAMESPACE)
Q_IMPORT_PLUGIN(QtQuick2Plugin)
Q_IMPORT_PLUGIN(QtQuickControlsPlugin)
Q_IMPORT_PLUGIN(QtQuickLayoutsPlugin)
Q_IMPORT_PLUGIN(QtQuick2WindowPlugin)
#endif
int main( int argc, char* argv[] )
{
QGuiApplication app( argc, argv );
……
QQmlApplicationEngine engine;
// 在静态编译下一个通融的解决方法是显式地注册QML类
#if defined(QT_STATIC) && !defined(Q_OS_MAC) && !defined(QT_NAMESPACE)
qobject_cast(qt_static_plugin_QtQuick2Plugin().instance()) ->registerTypes("QtQuick");
qobject_cast(qt_static_plugin_QtQuickControlsPlugin().instance())->registerTypes("QtQuick.Controls");
qobject_cast(qt_static_plugin_QtQuickControlsPlugin().instance())->registerTypes("QtQuick.Controls.Private");
qobject_cast(qt_static_plugin_QtQuickControlsPlugin().instance())->registerTypes("QtQuick.Controls.Styles");
qobject_cast(qt_static_plugin_QtQuickLayoutsPlugin().instance()) ->registerTypes("QtQuick.Layouts");
qobject_cast(qt_static_plugin_QtQuick2WindowPlugin().instance()) ->registerTypes("QtQuick.Window.2");
qobject_cast(qt_static_plugin_QtQuick2Plugin().instance()) ->initializeEngine( &engine, &quot ..
#4 [更好 09-26 23:58]
编译出错,提示如下:
release/main.o:main.cpp:(.text+0x66): undefined reference to `qt_static_plugin_QtQuickControlsPlugin()'
release/main.o:main.cpp:(.text+0x8e): undefined reference to `qt_static_plugin_QtQuickControlsPlugin()'
release/main.o:main.cpp:(.text+0xb6): undefined reference to `qt_static_plugin_QtQuickControlsPlugin()'
release/main.o:main.cpp:(.text+0xde): undefined reference to `qt_static_plugin_QtQuickLayoutsPlugin()'
release/main.o:main.cpp:(.text+0x15a): undefined reference to `qt_static_plugin_QtQuickControlsPlugin()'
release/main.o:main.cpp:(.text+0x186): undefined reference to `qt_static_plugin_QtQuickLayoutsPlugin()'
release/main.o:main.cpp:(.text+0x1b2): undefined reference to `qt_static_plugin_QtQuickLayoutsPlugin()'

回复 发表
主题 版块