Qt应用静态编译,静态链接,去mingwm10.dll,libgcc_s_dw2-1.dll依赖问题(转)

完全了解逻辑层次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静态编译版本:
有牛人http://code.google.com/p/qp-gcc/ 已经做好了,
http://code.google.com/p/qp-gcc/downloads/detail?name=mingw-static-4.4.5-all.7z
这个,下载覆盖$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依赖问题烦扰的,能明白本文第一句。

转自:http://blog.csdn.net/c154387417/article/details/6330245

原文地址:https://www.cnblogs.com/veins/p/3276966.html