全部博文(59)
分类: C/C++
2011-08-19 08:16:57
完全了解逻辑层次os/compiler/framework/application中静态链接、动态链接情况的,请绕道。
linux以及Xnux的大牛,也不用看了。
要想Qt应用做出来只是一个exe就能给客户运行,
有两个情况,搞定即可:
一、mingwm10.dll,libgcc_s_dw2-1.dll依赖
这与qt无关
用vc编译的就不存在……依赖这俩玩意的情况。
那么mingw版下的QT呢?
下载,静态版mingw(mingw本身和gcc都是static version)即可,见文末资源。
二、QtCoreX.dll QtXXX.dll等依赖
指定你的应用本身为静态编译即可。
1、project.pro添加QMAKE_LFLAGS=-static,
2、qt本身是静态版编译的,步骤见文末资源。
以上俩条件都需要,虽然qt静态版的,不用满足1即可,但是
逻辑上工程层次得指定,否则假设你是开源的,
别的兄弟拿过去编译,可能有些入行不久的会问为什么他的编译出来的不是一个文件了,呵呵。
而且你保不定自己就一直只有一套qt在跑,我就是静态动态版的都在用。
资源
--------------------------------------------------------------------------------
1、mingw静态编译版本:
有牛人 已经做好了,
这个,下载覆盖$QTDIR/../mingw就行,实在不信任我的,覆盖前先备份,就没风险了。
mingw和gcc编译是件不简单的事,
至少我觉得比qt编译复杂,特别是mingw的那一堆工具和补丁,
编译器和编译原理一直是心中的痛啊,啊啊啊。
2、qt静态编译步骤,这里有(注意评论,有更实用的做法提出来):
http://blog.csdn.net/MicroSky2813/archive/2010/02/01/5278096.aspx
p.s
至于第三种情况,msvcrt.dll 貌似winnt都带着吧,不用管。
kener32.dll?介个……
然后就是LGPL涉及静态链接版权问题
我个人比较认同“涉及LGPL库的开源,没涉及的可以不开,后者调用前者的部分提供obj”说法。
那么,Qt应用,用wrapper策略吧:
http://devbean.blog.51cto.com/448512/313477
好吧,聪明人会问,编译环境依赖,如mingw10.dll和libgcc_s_dw2-1.dll我看你怎么wrapper?
就已有资料看,这俩已经public domain了。
再啰嗦两句,release之前,用upx把你的exe压缩一下,尺寸更小,而debug版……就别了。
最后,希望受dll依赖问题烦扰的,能明白本文第一句。
Windows下安装完Qt4.5.2后,运行桌面上的Qt Creator,编译并运行程序,没有错误信息,程序可以运行。但当进入去此文件下的debug或者release文件目录,双击生成的.exe文件,就会出现:
问题一:
没有找到QtCore.dll,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题!
原因在于:装完Qt4.5.2之后,系统的环境变量没有进行设置。比如Qt4.5.2安装到了D:\Qt\2009.03文件夹下。那么设置系统环境变量方法为:右击“我的电脑”-“属性”-“高级”-“环境变量”,在下面的系统变量中,找到path,点击“编辑”,在后面添加:D:\Qt\2009.03\qt\bin;;确定之后。然后在去双击刚才的.exe文件,这时 就可以运行了!
问题二:
无法定位程序输入点_Z5qFreePv于动态链接库QtCore4.dll上
解决方法也是上面的步骤。要看清楚你的Qt安装路径!在设置坏境变量时注意每个路径间隔中的分号“;”
第二步:添加环境变量
1. 程序中部件使用资源文件
a. 为工程新建Qt Resource file
b. 打开资源文件,新建profix,比如取名为"images"
c. Add files: 添加你的图片文件
d. 在程序中要使用的地方用如下方式使用:
":/images/qq.ico" (注意:前面有个冒号“:”,不要忘记哦)
2. 为可执行程序添加图标:(参考帮助文档中的<
a. 找一个图表文件放在工程目录, 如"qq.ico"
b. 在工程目录下添加一个*.rc文件,如"myproject.rc"
c. 在myproject.rc文件中添加如下内容:
IDI_ICON1 ICON DISCARDABLE "qq.ico"
d. 在qt的工程文件(*.pro文件)中添加如下内容:
RC_FILE = myproject.rc
D:/Qt/2010.04/qt/bin;D:/Qt/2010.04/mingw/bin