QT程序在windows下部署发布
2020-12-13 02:07
标签:c blog code http a ext 转载:http://www.cnblogs.com/Fan_Fan/archive/2010/05/29/1746860.html QT程序在windows下部署发布 以下包括了部分网上收集的,以及qt帮助里的内容(Deploying an Application on Qt/Windows) 首先,打开windows控制台,然后,找到vs安装目录下的bin里,执行 vcvars32.bat
这个脚本。执行完之后,vs需要的所有环境变量就已经设置好了。 我的环境是QT 4.3.3 + mingw32-make 部署发布QT程序有两种方法: 第一种,静态编译,可生成单一的可执行文件。 第二种,动态编译,需同时附上需要的dll文件。 第一种 静态编译 1 编译QT。 要静态编译,首先要求QT是静态编译过的。在QT目录下执行: configure.exe -static -release make sub-src 就可以编译出静态库。如果只是用来分发程序,也可以mingw32-make release sub-src只编译一个静态库。 这个过程需要1-2个小时。QT目录会变成1.8G左右。注:mingw32-make和make是一样的。 如果用VC2005平台,在编译Qt的时候,configure.exe -static -platform win32-msvc2005 然后nmake sub-src或者nmake release sub-src完成静态编译。 2 编译程序。 然后到你自己的程序目录下执行: make clean qmake -config release make 这时会得到一个非常大的可执行程序,但也会有一个重要的问题,就是图片文件显示不出来。 按照QT帮助的说法,QT里的jpeg,gif等图片的支持都是以插件的形式存在的,现在我们还没有包含任何插件。 在main.cpp里: #include #include //这个 Q_IMPORT_PLUGIN(qjpeg) //这个 Q_IMPORT_PLUGIN(qgif) //这个 int main(int argc, char *argv[]) { QApplication app(argc, argv); … return app.exec(); } 在.pro里加入: QTPLUGIN += qjpeg qgif CONFIG += static QT的帮助里就做到这里,但我编译程序时出错如下: release/main.o(.text+0×1c9):main.cpp: undefined reference to `qt_plugin_instance_qgif()’ undefined reference to `qt_plugin_instance_qjpeg()’ 4 加入LIBS 在.pro中加入: LIBS += C:/Qt/4.3.3/plugins/imageformats/libqgif.a LIBS += C:/Qt/4.3.3/plugins/imageformats/libqjpeg.a 如果QT静态编译正确的话,你应该上面这个目录下看到这两个文件libqgif.a和libqjpeg.a
(据说以前的QT版本也可能是.lib或.o文件) 5 解决MinGW的mingwm10.dll依赖问题 LFLAGS = -enable-stdcall-fixup -Wl,-enable-auto-import
-Wl,-enable-runtime-pseudo-reloc -static -Wl,-s -Wl -mthreads -Wl,
-subsystem,windows quote: 一般只有用到threads的时候才用到mingwm10.dll,我们通常遇到的”缺少mingwm10.dll”问题,可以在程序qmake生成makefile.release文件后删除”-mthreads”参数即可,一般在
“LFLAGS”后面。当然,这只是临时解决方案,每次都要手动修改,也可以在编译QT前先修改qmake.h,不过不推荐这种方法。其实,
mingwm10.dll也就十多K,每次发布程序时一起打包也无所谓。 这时编译同样得到一个非常大的可执行程序(我写的这个贪吃蛇一共500多行,生成的exe有8M)。用AspPack压缩一下。就可以发给用户了(这时是2.6M)。 quote:
“这样编译出来的程序比较大,可以先用strip命令去掉程序里面一些无用信息后,用ASPack或者UPX之类的压缩加壳软件压缩一下,两者的压缩率基本都达到30%多一点,压缩效果还是很明显的。” 第二种:动态编译就很容易了。 用QT的默认安装,把生成的release下的exe文件,和下面几个核心文件放在一个文件夹里: MINGWM10.DLL QTGUI4.DLL QTCORE4.DLL VC2005编译程序运行时需要的几个dll文件 Microsoft.VC80.CRT.manifest 位于x:\Program Files\Microsoft Visual Studio
8\VC\redist\x86\\Microsoft.VC80.CRT msvcm80.dll msvcp80.dll msvcr80.dll QtCore4.dll QtGui4.dll 这样就可以运行了。但图片文件还是可能显示不出来,解决办法: 把程序文件夹里,建立一个imageformats目录(必须是这个名字),把qt目录下的plugin/imageformats目录下对应的dll文件copy过去。这样动态连接就完成了。 发布中文Qt程序时要注意的问题: 用Qt写好了程序,并撰写了中文的语言文件(.qm文件)
后,发布到没有安装过Qt的系统上时,却发现只有固定的界面文字中的中文能正常显示,而程序运行过程中保存到诸如txt、xml文件中的中文却变成了奇怪的编码,而读回时就会变成“?”。 解决方法很简单,有多种方法: 1)将以上的中文编码库文件安装到可执行程序的目录下的 codecs 目录下,程序启动时,QtCore中的初始化过程会自动找到该目录并加载到内存中。 2)在Qt程序启动时,用代码指定Qt的Library搜索路径。 3)编写qt.config文件,放在可执行文件的目录下,并在其中定义Codecs的路径。 4)对于用static编译的Qt,在主程序文件中写上这句宏指令:Q_IMPORT_PLUGIN(qcncodecs),并在Link中加入相应的LIB文件。 具体内容我不多说了,看Qt文档吧: doc/html/plugins-howto.html QT程序在windows下部署发布,搜素材,soscw.com QT程序在windows下部署发布 标签:c blog code http a ext 原文地址:http://www.cnblogs.com/lvdongjie/p/3758157.html
上一篇:python之pip安装第三方库
下一篇:spring mvc 上传文件