您的当前位置:首页正文

qt4.8.5_mingw4.6.1静态编译

来源:我们爱旅游
QT4.8.5+mingw4.6.1静态编译

以下内容根据网上内容及本人实际操作整理而成 一、准备软件

1. MinGW (C:\\Qt\\MinGW)

http://pan.baidu.com/share/link?shareid=174269&uk=673227135 这个文件解压就可以用了。 2. ActivePerl

3. qt-win-opensource-4.8.4-mingw.exe (D:\\Qt\\4.8.4) 4. qtcreator2.6x 二、安装软件

1. qt-win-opensource-4.8.4-mingw.exe,提示MinGW路径时,指定到正确位置(D:\\Qt\\MinGW)

2. 安装Perl环境,一路Next即可 3. 安装QtCreator 三、标准库编译 1. 配置编译选项

1)打开C:\\Qt\\4.8.4\\mkspecs\\win32-g++\\qmake.conf (建议先备份一下)

在QMAKE_LFLAGS后面加上 -static

并将QMAKE_LFLAGS_DLL后面的 -shared 改为 -static

保存并关闭

2)将C:\\Qt\\4.8.4\\bin 下的syncqt与syncqt.bat 这两个文件删除或改名 否则在编译时会提示找不到perl环境

3)修改src\\3rdparty\\webkit\\Source\\WebCore\\platform下的

DefaultLocalizationStrategy.cpp,定位到327行,将本行替换成

return WEB_UI_STRING(\"Look Up \\\"\\\"\item with selected word\").replace(\"runcatedStringForLookupMenuItem(selectedString)); 如不修改将出现编译Webkit 时会出现 U1077错误。

2. 开始编译

静态编译,只要release版本就够了。debug版,静态编译就没有必要了,debug版随便一个工程,生成的执行文件都要上百兆甚至几百兆,调试时,很慢。那么release静态版和debug动态版如何共存呢?稍后再介绍。 打开Qt 4.8.4 Command Prompt软件,输入

configure -confirm-license -opensource -platform win32-g++ -release -static -ltcg -no-qt3support -fast -exceptions -accessibility -rtti -stl

-qt-sql-sqlite -qt-sql-odbc -qt-zlib -qt-libpng -qt-libtiff -qt-libjpeg -qt-libmng -multimedia -audio-backend -script -scripttools -nomake demos -nomake examples -nomake docs -qt-style-windows -qt-style-windowsxp -qt-style-windowsvista -qt-style-plastique -qt-style-cleanlooks -qt-style-motif -qt-style-cde -plugin-sql-sqlite -plugin-sql-odbc configure参数很多,可以参考它的帮助,按自己需要增减参数。

PS:这个配置仅编译release版本,如果需要同时需要静态版的Debug版本,需要把-release 改为 -debug-and-release 耐心等待一会,直到提示:

Qt is now configured for building. Just run mingw32-make. To reconfigure, run mingw32-make confclean and configure. 接着输入 mingw32-make

等编译结束,如果没有什么error fail的提示,就恭喜你成功啦!

四、配置QT Creator

打开QT Creator, 菜单Tools==》Option==》Build&Run==》 Compiler选项卡:

如果没有自动检测到,手工点Add按钮,选MinGW,名称就叫MinGW吧,Compiler path:D:\\Qt\\MinGW\\bin\\g++.exe 点击Apply Qt Versions选项卡:

点Add按钮,选择D:\\Qt\\4.8.5\\bin\\qmake.exe,

version name: Qt4.8.5(4.8.5) 点击Apply Kits选项卡:

点Add按钮,name: qtstatic_rel

Device type: Desktop Compiler: MinGW

Debuger: release版本无所谓,在debug版一定要正确选择,否则无法调试

Qt version: Qt4.8.5(4.8.5)OK,至此,就可以编译静态的qt程序了,生成的exe文件可以独立运行。不过生成的exe文件体积比较大,可以用upx压 缩一下,会缩小到原来的40%左右。 五、qt静态编译release版本与动态debug版本共存的方法 2012-12-24 22:47

qt release版本,用静态编译发布比较方便,一个执行文件就可以去闯天下了。但debug版本用静态编译就非明智之举了,一方面,没有必要,一方面 debug版生成的目标文件随随便便就几百兆,调试起来效率太低了,我就曾饱受煎熬。如何动静态版本共存呢?这里介绍一下我用的方法。前一篇日志说了 release静态方法,安装目录是D:\\qt\\4.8.5

接下来,再安装一遍qt-win-opensource-4.8.5-mingw.exe,目录不要与前一个目录相同,比如安装到D:\\qt\\4.8.4shared. 安装结束后,

打开QT Creator, 菜单Tools==》Option==》Build&Run==》 Qt Versions选项卡:

点Add按钮,选择C:\\Qt\\4.8.5_shared\\bin\\qmake.exe,

version name: Qt4.8.5(4.8.5shared) 点击Apply Kits选项卡:

点Add按钮,name: qtshared_dbg

Device type: Desktop Compiler: MinGW

Debuger: 先点Manager-->Auto-detect,如果不能正确设置,就手工Edit,

Engine: GDB Engine Binary: C:\\Qt\\MinGW\\bin\\gdb-i686-pc-mingw32.exe

Qt version: Qt4.8.5(4.8.5shared)

在Qt中创建工程, Kits步骤时, 勾选qtstatic_rel Release 勾选qtshared_dbg Debug

这样,就实现在选择Release时,静态编译,Debug是动态编译。

插件在静态编译release与动态编译debug共存工程中的配置(备忘)

2012-12-24 23:02

Qt静态编译时,使用插件要用Q_IMPORT_PLUGIN宏导入,比如odbc插件,简体中文支持插件

#include

Q_IMPORT_PLUGIN(qsqlodbc) Q_IMPORT_PLUGIN(qcncodecs) 在pro文件中要加 QTPLUGIN += qsqlodbc QTPLUGIN += qcncodecs 而动态编译,就不能有这些。对于动静态共存的工程应该如何处理呢?可以用下面的方法,

在main.cpp文件中 #ifdef QT_NO_DEBUG

#include

Q_IMPORT_PLUGIN(qsqlodbc) Q_IMPORT_PLUGIN(qcncodecs) #endif

在pro文件中

CONFIG(release, debug|release) { QTPLUGIN += qsqlodbc QTPLUGIN += qcncodecs

}

CONFIG(debug, debug|release) { }

注意,左花括号一定要与CONFIG(xxxx, debug|release) 在同一行,否则起不到限定作用。

这样,工程在静态编译release版和动态编译debug版,都能正常进行了。

打造完美的QT桌面开发环境

1、下载

a)参考博客 http://blog.csdn.net/c154387417/article/details/6330245,下载mingw-static-4.4.5 编译器 mingw-static-4.4.5-all.7z,http://code.google.com/p/qp-gcc/

b)下载 qt4.8.5 源码包 qt-everywhere-opensource-src-4.8.5.zip,http://download.qt-project.org/official_releases/qt/4.8/4.8.5/ c)下载qt creator 源码包 qt-creator-opensource-src-3.0.1.zip,

http://download.qt-project.org/official_releases/qtcreator/3.0/3.0.1/ 2、解压mingw-static-4.4.5-all.7z 到 C:\\mingw-static-4.4.5-all

3、编译qt4.8.5为动态库

a)解压 qt-everywhere-opensource-src-4.8.5.zip 到 D:\\qt-everywhere-opensource-src-4.8.5_dynamic

b)建立目录C:\\Qt\\4.8.5-dynamic_gcc,把

D:\\qt-everywhere-opensource-src-4.8.5_dynamic 目录下的 mkspecs文件夹 复制到 C:\\Qt\\4.8.5-dynamic_gcc 下面。 c)复制下面的脚本

set path=c:\\mingw-static-4.4.5-all\\bin;%path% cd %~dp0

configure -confirm-license -opensource -release -fast -platform win32-g++ -prefix \"C:\\QT\\4.8.5-dynamic_gcc\" -no-qt3support -script -scripttools -qt-zlib -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -qt-sql-sqlite -plugin-sql-sqlite -qt-sql-odbc -plugin-sql-odbc -qt-style-windows -qt-style-windowsxp -qt-style-windowsvista

-qt-style-plastique -qt-style-cleanlooks -qt-style-motif -qt-style-cde -nomake demos -nomake examples -mp mingw32-make

mingw32-make install Pause

保存为dynamic编译配置.bat ,放在

D:\\qt-everywhere-opensource-src-4.8.5_dynamic 路径下,运行该脚本,等2~3小数后就编译好了。编译的动态库在C:\\Qt\\4.8.5-dynamic_gcc下,

4、编译qt4.8.5为静态库

a)解压 qt-everywhere-opensource-src-4.8.5.zip 到 D:\\qt-everywhere-opensource-src-4.8.5_static

b)建立目录D:\\Qt\\4.8.5static,把

D:\\qt-everywhere-opensource-src-4.8.5_static 目录下的 mkspecs文件夹 复制到 D:\\Qt\\4.8.5static 下面。 c)复制下面的脚本

set path=c:\\mingw-static-4.4.5-all\\bin;%path% cd %~dp0

configure -confirm-license -opensource -release -fast -static -platform win32-g++ -prefix \"D:\\QT\\4.8.5static \" -no-qt3support -script

-scripttools -qt-zlib -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -qt-sql-sqlite -plugin-sql-sqlite -qt-sql-odbc -plugin-sql-odbc -qt-style-windows -qt-style-windowsxp -qt-style-windowsvista

-qt-style-plastique -qt-style-cleanlooks -qt-style-motif -qt-style-cde -nomake demos -nomake examples -no-webkit -mp mingw32-make

mingw32-make install Pause

保存为static编译配置.bat ,放在

D:\\qt-everywhere-opensource-src-4.8.5_static 路径下,运行该脚本,等2~3小数后就编译好了。编译的静态库在C:\\Qt\\4.8.5-static_gcc下,

5、编译qt creator

a) 下载 http://pan.baidu.com/s/1i3FoYzF 解压出qtbinpatcher.exe,放到D:\\qt-everywhere-opensource-src-4.8.5_dynamic目录下,并运行它,用来patch该目录下的qmake.exe 文件。我从

http://sourceforge.net/projects/mingwbuilds/files/external-binary-packages/Qt-Builds/ 分离出了 Qtbinpatcher.exe ,为什么需要这个文件以及其作用,大家网上搜索。

b)解压 qt-creator-opensource-src-3.0.1.zip 到 D:\\qt-creator-opensource-src-3.0.1

复制脚本

set path=C:\\mingw-static-4.4.5-all\\bin;%path%

set path=D:\\qt-everywhere-opensource-src-4.8.5_dynamic\\bin;%path% set QTDIR=D:\\qt-everywhere-opensource-src-4.8.5_dynamic set QMAKESPEC=win32-g++ cd %~dp0 qmake mingw32-make

mingw32-make install Pause

保存为 qt-creator_build.bat,放到 D:\\qt-creator-opensource-src-3.0.1目录下,并运行它,等2~3小数编译完。

c)复制D:\\qt-creator-opensource-src-3.0.1 目录下的 bin、lib和share 3个文件夹到 C:\\Qt\\4.8.5-dynamic_gcc 目录下,与里面已经存在的文件夹合并。再复制 qtbinpatcher.exe 到C:\\Qt\\4.8.5-dynamic_gcc里面,运行

qtbinpatcher.exe来patch该路径下的qmake。到此编译工作全部结 束。 6、进入C:\\Qt\\4.8.5-dynamic_gcc\\bin,运行qtcreator.exe看看效果。

Mingw32、qt4.8.5动态库及静态库全齐了,在 qtcreator 下怎么配置就不说了。 后记:在这个过程中试过qtcreator 2.8.1、2.7.2 等多个版本,只有3.0.1这个版本编译成功。这个IDE版本的好处:绿色、免安装、体积小,不用vc作编译器就因为它太大。

Qt应用静态编译,静态链接,去

mingwm10.dll,libgcc_s_dw2-1.dll依赖问题

2011-04-18 07:06 2176人阅读 评论(2) 收藏 举报 qtwrapperexegcc编译器domain

完全了解逻辑层次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依赖问题烦扰的,能明白本文第一句。

因篇幅问题不能全部显示,请点此查看更多更全内容