Qt5.7.0静态编译

起因:项目中用qt quick程序写的上位机程序,在公司多台电脑能运行,客户电脑要更新显卡才能运行,可后来发现是少了opengl32.dll。于是乎,想运用静态编译来避免此问题,开干。

准备工作:工作机本身安装的qt5.7.0 mingw,由于通过vs2010编译了一个动态库,上位机调用的时候也得用vs的编译器,下载了msvc2013,msvc2010不得行,这个问题还鼓捣了一阵。但安装的时候都没有安装源码,得,下源码去。下载源码的时候看好像得装perl和python,间歇就把perl装好了,python以前都有装。

1,源码下载

直接去网上下载,不多说,一样选择qt5.7.0版本,保持一致

2.查找编译教程,开始编译

解压

修改conf文件

msvc
修改源码中\qtbase\mkspecs\common\msvc-desktop.conf文件
QMAKE_CFLAGS_RELEASE    = -O2 -MD
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
QMAKE_CFLAGS_DEBUG      = -Zi -MDd
改为
QMAKE_CFLAGS_RELEASE    = -O2 -MT
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi
QMAKE_CFLAGS_DEBUG      = -Zi -MTd

mingw
修改源码中\qtbase\mkspecs\win32-g++\qmake.conf文件
            QMAKE_LFLAGS            =
            QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads
            QMAKE_LFLAGS_EXCEPTIONS_OFF =
            QMAKE_LFLAGS_RELEASE    = -Wl,-s
            QMAKE_LFLAGS_DEBUG      =
            QMAKE_LFLAGS_CONSOLE    = -Wl,-subsystem,console
            QMAKE_LFLAGS_WINDOWS    = -Wl,-subsystem,windows
            QMAKE_LFLAGS_DLL        = -shared

            改为:

             QMAKE_LFLAGS            = -static
            QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads
            QMAKE_LFLAGS_EXCEPTIONS_OFF =
            QMAKE_LFLAGS_RELEASE    = -Wl,-s
            QMAKE_LFLAGS_DEBUG      =
            QMAKE_LFLAGS_CONSOLE    = -Wl,-subsystem,console
            QMAKE_LFLAGS_WINDOWS    = -Wl,-subsystem,windows
            QMAKE_LFLAGS_DLL        = -static

编译安装

msvc

设置python,perl和nmake的环境变量

configure -confirm-license -opensource -platform win32-msvc2013 -debug-and-release -static -prefix "F:\QT_MSVC\5.7\msvc2013_static" -qt-sql-sqlite -qt-sql-odbc -plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -qt-freetype -no-qml-debug -no-angle -nomake tests -nomake examples

nmake

nmake install

mingw

设置python,perl和nmake的环境变量

configure -confirm-license -opensource -platform win32-g++ -debug-and-release -static -prefix "C:\Qt\Qt5.7.0\5.7\mingw53_32_static" -qt-sql-sqlite -qt-sql-odbc -plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -qt-freetype -no-qml-debug -no-angle -nomake tests -nomake examples

mingw32-make -j2  / mingw32-make

mingw32-make install

3,测试

编译很顺利,msvc版本编译的时候,遇到一个问题,网上找到解决方案

qnode_p.h
Comment line 104 and 105:
// template
// using DestructionFunction = void (Caller::*)(NodeType *);
Change line 108 from:
void registerDestructionHelper(NodeType *, DestructionFunction, PropertyType);
to:
void registerDestructionHelper(NodeType *, void (Caller::*)(NodeType *), PropertyType);

line 111 from:
void registerDestructionHelper(NodeType *node, DestructionFunction func, NodeType *&)
to :
void registerDestructionHelper(NodeType *node, void (Caller::*func)(NodeType *), NodeType *&)

line 119 from:
void registerDestructionHelper(NodeType *node, DestructionFunction func, QVector &)
to :
void registerDestructionHelper(NodeType *node, void (Caller::*func)(NodeType *), QVector &)

其他都没啥问题,打开qtcreator增加编译套件,创建项目,编译,运行,bingo

本机上widget和qt quick运行都没问题,但是拷贝到纯净电脑,widget程序也没问题,就是qt quick程序,一打开就崩溃,找了好久,到现在还是没能知道原因,看别人有用qt5.9.0静态发布qml程序能成功,就是把动态库里qml下的.qml文件拷贝到静态库里,并增加到项目里面,我试过,还是没成,放弃了,想到会不会是qt版本原因,可惜没去测试。

 

你可能感兴趣的:(Qt,QML)