(2012.03.07)如何在windows上发布Qt程序

转载自   zhanglei_186
最终编辑   gclsoft

 

#define me freshman //我是新手,发现错误请指正

你已经很厉害,可以写一些实现自己想法的程序了。

那么,写好了之后,你需要分发给用户来使用。

可在本机可以运行的程序,到了客户端却总是无法运行。

要么提示,程序配置错误,请重新安装。。
(由于应用程序配置不正确,应用程序未能启动)


settings_wrong.JPG(VC2005编译的程序)

或者提示找不到需要的dll文件,(没有找到 **.dll,因此这个应用程序未能启动)


miss_Component.JPG(mingw32编译的程序)

有两种方法可以解决这个问题。

第一种,静态编译。
第二种,同时附上需要的dll文件。

静态编译

优点,发布简单,单一文件。
缺点,库文件很大,更新程序版本不方便。每次升级,都要重新分发所有的内容。
。。。。。

mingw平台静态编译,在编译Qt的时候,有个configure.exe程序,
configure.exe -static -platform win32-g++
可以产生静态编译项目文件。然后,
mingw32-make sub-src
就可以编译出静态库。如果只是用来分发程序,也可以mingw32-make release sub-src只编译一个静态库。

VC2005平台,在编译Qt的时候,configure.exe -static-platform win32-msvc2005
然后nmake sub-src或者nmake release sub-src完成静态编译。

再然后,就是把你的程序重新用静态编译的Qt再编译一次。
你会得到一个非常大的可执行程序。推荐使用AspPack压缩一下。就可以发给用户了。

附加Dll文件

优点,更新方便,发布多个产品时,可以统一使用一个库。
缺点,文件多、杂。
。。。

mingw编译程序运行时需要的几个dll文件
mingwm10.dll
QtCore4.dll
QtGui4.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

推荐一个很好用的工具,微软出的一个小工具Dependency Walker,也被微软集成到了它的VS里面。在
x:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin\depends.exe
它可以检测出绝大多数的程序需要的dll库文件。这样,就不用手动去查找缺失的dll文件了。
另外,还有一些你程序附加的dll库文件,比如,sql.dll libpng.dll

下面,就可以发布你的程序了~

QT4.6.1+MinGW在windows中静态编译(2010.02.01亲测) 收藏 
最近LGPL协议与Qt版的开放,Qt开始流行,Qt的静态编译(就是只生成.exe不需要dll)也开始被人注意,好像没有专门的教程,问的人也不少,就专门写了这么个东西

Qt版本4.6.1 从官网下的2010.01SDK

第一步:<QTDIR>\mkspecs\win32-g++\qmake.conf:这个文件里找这行(win32-g++代表环境,其他环境就用其他文件夹里的 )
      QMAKE_LFLAGS=-enable -stdcall-fixup-Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
   用#注释掉
      加这句(其实就是改成这句了)
      QMAKE_LFLAGS=-static -static-libgcc -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc

第二部:Qt/qt里有configure.exe 
      用命令行加参数调用 
     configure -release -static -fast
      里面有选择 o是开源选择 然后确定
     mingw32-make 
      进行编译 
注:这一步相当耗时。我i7的小本用了两个多小时。

第三步:mingwm10.dll问题
    用到threads时候才用mingwm10.dll,所以不用的话就可以在项目里的makefile.release里LFLAGS= 去掉-mthreads

最后 ,就可以用了 ,还有请注意LGPL协议

注意mingw的环境变量 
做完后也不要忘记QTDIR PATH的环境变量


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/MicroSky2813/archive/2010/02/01/5278096.aspx

QT静态编译 收藏 
装QT SDK 后,默认采用的是动态链接库的编译方式,如果需要发布程序,需要在可执行的exe文件中添加必须的动态链接库,然而有些动态链接库文件很大,这并不是我们想要的结果。

最好的办法是提交一个静态链接的程序。但是安装的Qt是动态编译的,要生成静态的版本,就需要自己重新进行编译。

首先需要修改位于<QTDIR>\mkspecs\win32-g++ 下的qmake.conf,在QMAKE_LFLAGS标签中增加-static。然后在“开始”菜单中运行Qt 4.4.3 Command Prompt程序,会启动一个命令行界面。再里面打入configure -static -release -no-exceptions。接受里面提到的许可之后,就会开始编译生成qmake并进行配置。配置完成以后,再输入mingw32-make sub-src。这样就开始对Qt进行编译,这步需要很长时间。
    然后再像以前这样重新编译和生成自己写的程序,这样的生成的可执行程序就是使用静态链接的,可以直接在未安装Qt的电脑上运行。这样的副作用就是,可执行文件变得非常大,有6.81MB!动态链接的版本只有82.5KB。当然,如果加上那些依赖的动态链接库,静态链接的程序在体积上还是有优势的

存在问题:只能使用realse版本,debug版本出问题。。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gaorentaba/archive/2010/03/01/5336124.aspx

平台:windows7           软件:qt4.6+qt creator 1.3     使用的安装包是   qt-sdk-win-opensource-2009.05.exe

问题描述:
         (1)使用qt creator 生成工程,写好程序进行编译运行,在qt creator点击运行,程序能跑起来,没问题,可是我在工程目录下找到编译生成的程序双击运行时,提示缺少mingwm10.dll,无法运行。
         (2) 按照 http://wiki.qtcentre.org/index.php?title=Building_static_Qt_on_Windows#MinGW 这个方法完成操作以后,使用qt creator 不能用debug,只能使用release选项,使用debug选项产生的错误提示是:collect2:ld returned 1 exit status     通过查找资料发现是缺少debug库

解决方案:
         (1)编辑 C:\Qt\2009.05\qt\mkspecs\win32-g++\qmake.conf 文件 把 QMAKE_LFLAGS = -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
                           改为:QMAKE_LFLAGS = -static -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
         (2)在开始菜单里找到Qt Command Prompt并运行,输入命令:   configure -static -debug-and-release -no-exceptions
                 (3)上一条命令运行成功后再输入命令:   mingw32-make sub-src
等1 ~3 小时可能就运行完了   完成后就ok了。。。
已经在我的机子上验证,祝大家好运!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值