`
bbsunchen
  • 浏览: 231695 次
  • 性别: Icon_minigender_1
  • 来自: 天朝帝都
社区版块
存档分类
最新评论

Qt程序在windows下的发布

 
阅读更多

 

这个问题,其实 Qt 的 manual 中解释的已经比较清楚了。下面是我根据自己的理解和实验后写的东西,希望比Qt文档容易理解一点。

另外:你可能对 Qt 插件学习(一) 感兴趣。如果需要制作安装程序,请访问 NSIS学习笔记(以Qt4程序打包为例)

下面不涉及静态编译(静态编译可以看看这儿),只包含动态编译(也就是Qt默认的情况),主要又分 mingw 和 msvc 两种情况:

Mingw

首先,我们需要生成 release 模式的可执行程序(不少同学抱怨,一个小小程序却需要100多M的动态库,就是因为用的debug)

qmake mingw32-make release

而后将 可执行文件 与 需要的动态库放到同一个文件夹下,一般需要

  • myprogram.exe
  • mingwm10.dll
  • libgcc_s_dw2-1.dll
  • qtcore4.dll
  • qtgui4.dll

有同学抱怨,动态库拷过去以后,程序报错 无法定位程序输入点于动态链接库QtCore4.dll上 ,这一般是由于系统中装了多套Qt的运行库,而你拷贝的不是Qt安装目录下的库所导致的。比如,当安装的是Qt SDK时,很容易导致这个问题,因为里面的Qt是mingw编译的,但里面的QtCreator是msvc编译的,所以不少人不小心就吧QtCreator带的Qt运行库拷过来了。

如果你不需要其他的插件,那么就可以发布程序了,然而不少同学抱怨 jpg、gif、bmp 等格式的图片无法显示,这是因为 Qt 原生支持 png,而其他格式需要通过插件支持(插件在 %QTDIR%/plugins\imageformats 目录下)

你只需将需要的插件拷贝到可执行程序所在的目录下的 imageformats 目录下即可

  • myprogram.exe
  • imageformats\qjpeg4.dll
  • imageformats\qgif4.dll
  • ...

同样,如果你的程序需要gb2312、gbk编码支持,那么需要将 %QTDIR%\plugins\codecs 目录下的相应插件拷贝到可执行程序所在目录下的 codecs 目录下

  • myprogram.exe
  • codecs\qcncodecs4.dll
  • ...

建议:不妨多看看Qt安装目录下的plugins目录,熟悉这些插件分别是做什么的,你发布的程序需要哪些。

现在,程序可以发布了。你现在也可以通过 nsis 来制作一个安装包(NSIS学习笔记(以Qt4程序打包为例))。

msvc

如果用的VS2008 而不是mingw,发布的过程其实基本是一样的。

首先生成 release 模式的 可执行文件

qmake nmake release

而后准备需要的动态库与插件

  • myprogram.exe
  • qtcore4.dll
  • qtgui4.dll
  • imageformats\*4.dll
  • ...

因为是vc编译的,所以不需要mingw的 mingwm10.dll libgcc_s_dw2-1.dll ,取代他们的是VC2008的C\C++ 运行库:

  • MSVCR90.DLL
  • MSVCP90.DLL

如果你用的Windows xp 之前的系统,那么只要将这两个运行库和可执行程序放于同一个目录即可。

但对于Windows xp (包括)之后的系统,这样做并不会正常工作,程序会报告:由于应用程序配置不正确,应用程序未能启动。这个问题有点复杂,其实解决方法很简单,只需在用户机器上安装1M多的VS2008可再发行包 vcredist_x86.exe 即可

该包会将运行库安装到 window系统目录下的 WinSxS 目录下,对xp之前的系统,还会将运行库同时安装到path路径下的目录内。其实如果用户装过其他人编写的VC2008的程序,机器上很应该已经装过该包了。

或许你要问,如果不想安装 可再发行包怎么办,比如就想把需要dll一块和程序打包,我们可以这么做:

将文件夹 (如果你用的VS2008 express,该文件夹不存在)

<Visual Studio Install Path>\VC\redist\<Architecture>\Microsoft.VC90.CRT

直接复制到可执行程序所在目录

  • myprogram.exe
  • Microsoft.VC90.CRT\*

注意:

  • 如果用户机器上已经安装了可再发行包,程序将永远不会使用Microsoft.VC90.CRT下的库。
  • 当采用这种方法时,如果同时发布插件(包括图片插件等),那么插件编译时必须:

 

CONFIG-=embed_manifest_dll

使得生成的插件中不嵌入manifest文件,否则插件不被程序识别(其实也可以识别,只要将 Microsoft.VC90.CRT 拷贝一份和插件放到同一文件夹即可,当然这种方式很不好,如果插件分布在几个目录下,要放置Microsoft.VC90.CRT的很多副本)。

工具

1. 一定要记住: Dependency Walker 是你的好帮手,它会告诉你你的 exe 和 dll需要哪些库,以及它加载的动态库都在哪个文件夹内 等

2. 最好准备一个进程查看的工具,比如微软的 Process Explorer等,来查看你的程序到底加载了哪些动态库(加载了哪些插件等)


引用:http://hi.baidu.com/cyclone/blog/item/d77a86182fb915b84bedbc57.html

分享到:
评论

相关推荐

    Qt 程序在 windows 下的发布.docx

    【Qt程序在Windows下的发布】 Qt程序在Windows平台上的发布涉及到多个步骤,主要是为了确保程序在没有完整Qt环境的计算机上也能正常运行。Qt官方文档虽然提供了相关指导,但有时可能难以理解,以下是一个简化版的...

    Qt程序在windows下的发布流程.doc

    ### Qt程序在Windows下的发布流程详解 #### 一、引言 Qt 是一款跨平台的应用开发框架,广泛应用于桌面和嵌入式系统。对于开发者来说,掌握如何在不同的操作系统上部署Qt应用程序至关重要。本文将详细介绍Qt程序在...

    Qt 程序在 windows 下的发布.pdf

    在Windows环境下发布Qt程序涉及到多个步骤,主要是确保所有必要的动态链接库(DLLs)和插件能够与应用程序一起正确运行。Qt手册对此已有详细介绍,但这里我们将深入探讨并简化这个过程。 首先,区分静态编译和动态...

    qt程序 windows下qt 4.5.0版本

    QT程序在Windows下的开发主要基于Qt库,这是一个跨平台的应用程序开发框架,广泛应用于桌面、移动设备和嵌入式系统。在本例中,我们关注的是Qt 4.5.0版本,这是一个较早但仍然具有重要历史价值的版本。 Qt 4.5.0在...

    C++:发布Qt程序

    本文将详细探讨如何在C++环境中发布Qt程序,以便于在不同平台上运行。 首先,理解Qt程序的发布过程涉及到以下几个关键步骤: 1. **构建设置**: 在发布程序前,确保你的Qt项目配置正确。在Qt Creator中,你需要...

    windows 系统下的QT程序打包与发布

    Windows 系统下的 QT 程序打包与发布 本文将详细介绍 Windows 系统下的 QT 程序打包与发布的过程,并提供了详细的步骤和说明。 一、下载和安装 QT 要开始使用 QT,我们首先需要下载和安装 QT。在浏览器中下载...

    Qt程序打包发布

    QtCreater工具Linux开发的程序发布相比于Windows下发布较麻烦,该手册经过实践的证明,供大家参考。

    Qt5 for windows plugin dll

    Qt5是Qt库的一个版本,它是一个跨...开发者需要确保在发布程序时,一起打包所有必要的依赖,以确保用户能够在没有完整Qt安装的情况下也能顺利运行应用程序。这涉及到对Qt库、插件和DLL机制的深入理解和细致的打包过程。

    windows上运行Qt程序所需的dll文件

    当你的Qt程序是在MinGW环境下编译的,那么在目标机器上运行时需要这个库。 4. **mingwm10.dll**:这是MinGW(Minimalist GNU for Windows)的一部分,是一个用于在Windows上编译和运行GNU工具链的移植层。它提供了...

    QT5发布程序需要的所有依赖库文件

    QT5是Qt开发框架的第五个主要版本,它是一个跨平台的应用程序开发工具包,...当把QT5程序打包发布时,确保这些库文件与exe文件一同包含在目标目录下,可以保证程序在不同计算机上正确运行,而无需额外安装其他组件。

    windows下打包Qt程序

    在Windows环境下,打包Qt程序是为了将开发完成的Qt应用程序转换为独立的可执行文件,方便在没有Qt环境的计算机上运行。这个过程涉及到Qt库的静态链接、资源文件的处理以及依赖库的解决等多个环节。以下是一份详细的...

    程序发布_Qt程序发布_QT_

    本篇文章将详细讲解如何发布Qt程序,使得它们能够在没有安装Qt环境的计算机上正常运行。 首先,理解Qt程序发布的概念至关重要。发布一个Qt程序意味着我们需要打包所有必要的库和资源文件,以便在目标机器上无需完整...

    Qt之程序发布以及打包成exe安装包 - fengMisaka - 博客园1

    【Qt程序发布与打包成exe安装包】 在Qt开发中,当我们的应用程序开发完毕,需要将其发布以便用户在没有Qt环境的计算机上运行。本文主要介绍如何设置应用程序图标,发布程序,以及使用Inno Setup打包成exe安装包的...

    Qt 应用程序 发布工具

    Qt应用程序发布工具是一种基于Qt Installer Framework的解决方案,用于简化和优化Qt开发的软件的分发过程。这个工具允许开发者将应用程序及其所有相关依赖项整合到一个可执行的安装包中,便于用户在不同平台上轻松...

    Qt5.15.2 Windows系统下配置Qt安卓环境-2024年1月2日更新

    **Qt5.15.2在Windows系统下配置Qt安卓环境** 配置Qt5.15.2用于在Android平台开发是一项必要的任务,特别是在Windows 10操作系统中。Qt是一个跨平台的应用程序开发框架,它允许开发者用C++编写一次代码,运行在多个...

    Qt程序打包工具

    总结,Qt程序打包工具使得Qt应用的分发变得更加简单,通过整合必要的库和依赖,确保程序能在各种环境中无缝运行。理解这些知识点对于任何Qt开发者来说都是至关重要的,有助于提高应用的兼容性和用户体验。

    msvc2017编译的qt程序打包后无法在win7运行的解决方法

    ### msvc2017编译的Qt程序打包后无法在Win7运行的解决方法 在使用Microsoft Visual Studio Community 2017编译Qt应用程序并进行打包部署时,经常会出现程序在某些环境下(如Windows 7操作系统)无法正常运行的情况...

    Windows如何打包Qt程序

    在Windows平台上,打包Qt程序是为了将开发者创建的GUI应用程序转换为用户友好的可执行文件,以便在不安装Qt库的机器上运行。这个过程通常涉及几个关键步骤,包括配置、编译、静态链接和创建安装包。下面我们将详细...

    Windows Qt环境下DCMTK库

    **Windows Qt环境下的DCMTK库** DCMTK(DICOM Toolkit)是一个开源软件库,专为处理DICOM(Digital Imaging and Communications in Medicine)标准而设计。DICOM是医学成像领域广泛使用的通信协议和数据格式标准。...

    Qt应用程序在windows和Linux操作系统下的打包发布(超详细,超清晰全面,图文并茂)

    简介2.windows下的打包1)发布环境2)方法一 — release版本发布a) release要发布程序b) 通过`windeployqt`打包3)方法二 — 发布成独立的可执行exe文件a) 下载工具b) 打包4)方法三 — 打包成安装包发布a)通过...

Global site tag (gtag.js) - Google Analytics