转载: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
分享到:
相关推荐
在Windows环境下发布Qt程序,无论是使用MinGW还是MSVC编译器,都需要关注动态库和插件的管理。通过遵循上述步骤,开发者可以有效地解决常见的发布问题,确保最终用户能够顺利运行程序。此外,对于更复杂的发布场景,...
### Qt程序部署至开发板的关键知识点 #### 一、Qt简介与历史背景 - **Qt** 是一个跨平台的C++图形用户界面库,由挪威的Trolltech公司(现更名为The Qt Company)开发,其核心特点在于强大的跨平台能力和面向对象的...
本文将详细介绍如何在 Windows 环境下构建 QtDBus 库,并通过具体的示例来演示其运行与通信机制。 #### 准备工作 在开始之前,请确保安装了以下软件: - **expat-2.1.0.tar.gz** 及其 Windows 二进制版本 `expat-...
本文将详细探讨如何在C++环境中发布Qt程序,以便于在不同平台上运行。 首先,理解Qt程序的发布过程涉及到以下几个关键步骤: 1. **构建设置**: 在发布程序前,确保你的Qt项目配置正确。在Qt Creator中,你需要...
QT5是Qt开发框架的第五个主要版本,它是一个跨平台的应用程序开发工具包,...当把QT5程序打包发布时,确保这些库文件与exe文件一同包含在目标目录下,可以保证程序在不同计算机上正确运行,而无需额外安装其他组件。
在部署Qt应用程序到Windows时,要注意选择正确的运行时库版本(如Debug或Release),以及匹配的CPU架构(x86或x64)。此外,为了确保程序的稳定性和兼容性,还需要考虑处理任何系统级别的差异,比如屏幕分辨率、字体...
Qt5是Qt库的一个版本,它是一个跨...开发者需要确保在发布程序时,一起打包所有必要的依赖,以确保用户能够在没有完整Qt安装的情况下也能顺利运行应用程序。这涉及到对Qt库、插件和DLL机制的深入理解和细致的打包过程。
QT+OpenCV+Tensorflow在Windows上的部署是一个复杂的任务,涉及到多个关键技术和步骤。QT是一个跨平台的应用程序开发框架,广泛用于图形用户界面设计;OpenCV是计算机视觉库,提供了丰富的图像处理和计算机视觉功能...
当你的Qt程序是在MinGW环境下编译的,那么在目标机器上运行时需要这个库。 4. **mingwm10.dll**:这是MinGW(Minimalist GNU for Windows)的一部分,是一个用于在Windows上编译和运行GNU工具链的移植层。它提供了...
本篇文章将详细讲解如何发布Qt程序,使得它们能够在没有安装Qt环境的计算机上正常运行。 首先,理解Qt程序发布的概念至关重要。发布一个Qt程序意味着我们需要打包所有必要的库和资源文件,以便在目标机器上无需完整...
在使用Microsoft Visual Studio Community 2017编译Qt应用程序并进行打包部署时,经常会出现程序在某些环境下(如Windows 7操作系统)无法正常运行的情况。这主要是因为缺少必要的动态链接库(DLLs),例如`msvcp140...
【Qt程序发布与打包成exe安装包】 在Qt开发中,当我们的应用程序开发完毕,需要将其发布以便用户在没有Qt环境的计算机上运行。本文主要介绍如何设置应用程序图标,发布程序,以及使用Inno Setup打包成exe安装包的...
本文将详细介绍几种Qt程序的发布部署方法。 首先,我们需要理解Qt程序运行所需的依赖。Qt库通常由许多动态链接库(dll)组成,这些库需要与可执行文件一同分发,以便在没有完整Qt安装的系统上运行。以下是两种常见...
总结,Qt程序打包工具使得Qt应用的分发变得更加简单,通过整合必要的库和依赖,确保程序能在各种环境中无缝运行。理解这些知识点对于任何Qt开发者来说都是至关重要的,有助于提高应用的兼容性和用户体验。
**Qt5.15.2在Windows系统下配置Qt安卓环境** 配置Qt5.15.2用于在Android平台开发是一项必要的任务,特别是在Windows 10操作系统中。Qt是一个跨平台的应用程序开发框架,它允许开发者用C++编写一次代码,运行在多个...
Qt应用程序发布工具是一种基于Qt Installer Framework的解决方案,用于简化和优化Qt开发的软件的分发过程。这个工具允许开发者将应用程序及其所有相关依赖项整合到一个可执行的安装包中,便于用户在不同平台上轻松...
现(20181020)Qt已升级到5.11,基本不会在有基于Qt3的新开发,但可能仍有老旧程序需要维护。包中有Qt3.3.4版windows商业版安装程序和许可证。安装时使用许可证会提示已经过期,不能获得Trolltech[狗头]的更新和支持...
《Linux与Qt程序设计》这本书籍聚焦于Linux操作系统环境下Qt框架的程序设计,是想要从事基于Linux平台的软件开发人员的一本非常有价值的参考书籍。Linux操作系统是一个类Unix系统,以其开源性、稳定性和安全性被广泛...
Qt作为一款强大的跨平台开发框架,其灵活性和兼容性使得开发者能够轻松地将应用程序部署到多种操作系统上,包括Android。这为C++开发者打开了进入移动平台的大门,无需掌握Java,也能进行Android应用开发。 在...