• 11359阅读
  • 10回复

[讨论]qt4.8.4+mingw4.6.1静态编译 [复制链接]

上一主题 下一主题
离线realfan
 

只看楼主 倒序阅读 楼主  发表于: 2012-12-25
qt4.8.4+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 (C:\Qt\4.8.4)
4. qtcreator2.6x
二、安装软件
1. qt-win-opensource-4.8.4-mingw.exe,提示MinGW路径时,指定到正确位置(C:\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
(注:如果用Qt4.8.3版本,
修改QT 4.8.3安装目录下mkspecs\win32-g++\qmake.CONF文件,在qmake.CONF文件中QMAKE_IDC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}idc.exe
之后一行添加:QMAKE_RCC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}rcc.exe
否则,工程中有qrc文件时,会出错。4.8.4版本没有问题


保存并关闭
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 \"<selection>\"", "Look Up context menu item with selected word").replace("<selection>", truncatedStringForLookupMenuItem(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 -prefix "c:\QT\4.8.4-mingw32-rel-static"
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的提示,
运行 mingw32-make install
恭喜你成功啦!


四、配置QT Creator
打开QT Creator, 菜单Tools==》Option==》Build&Run==》
Compiler选项卡:
      如果没有自动检测到,手工点Add按钮,选MinGW,名称就叫MinGW吧,Compiler path:C:\Qt\MinGW\bin\g++.exe
      点击Apply
Qt Versions选项卡:
        点Add按钮,选择C:\Qt\4.8.4\bin\qmake.exe,
                                     version name: Qt4.8.4(4.8.4)
        点击Apply
Kits选项卡:
       点Add按钮,name: qtstatic_rel
                            Device type: Desktop
                            Compiler: MinGW
                            Debuger: release版本无所谓,在debug版一定要正确选择,否则无法调试
                            Qt version: Qt4.8.4(4.8.4)OK,至此,就可以编译静态的qt程序了,生成的exe文件可以独立运行。不过生成的exe文件体积比较大,可以用upx压缩一下,会缩小到原来的40%左右。



离线liukang325

只看该作者 1楼 发表于: 2012-12-25
mingw4.6.1 这个软件,在哪下?我找了好久……
这个不装在(C:\Qt\MinGW)
那这个  . qt-win-opensource-4.8.4-mingw.exe,提示MinGW路径时,指定到正确位置(C:\Qt\MinGW)
就没法往下进行……
离线liukang325

只看该作者 2楼 发表于: 2012-12-25
找了个mingw4.4  正在重装qt-win-opensource-4.8.4-mingw.exe
好像可以。

另外,提醒下强大的楼主,把贴子中的几个改下
一会C:\Qt\4.8.2\bin
一会 (C:\Qt\4.8.4)
版本应该是4.8.4的吧?
离线liukang325

只看该作者 3楼 发表于: 2012-12-25
终于成功了!在网上找了很多方法都没有静态编译成功!
非常感谢LZ详细的讲解!!!!
离线liukang325

只看该作者 4楼 发表于: 2012-12-25
不行……编译出来的EXE文件是变大了。但还是提示差DLL文件……

请LZ指教……
离线liukang325

只看该作者 5楼 发表于: 2012-12-25
qt4.8.0+mingw4.4  编译可以了……还是谢谢LZ的方法!很详细!
离线realfan

只看该作者 6楼 发表于: 2012-12-27
回 1楼(liukang325) 的帖子
http://pan.baidu.com/share/link?shareid=174269&uk=673227135
这个是我用的,解压到指定目录就可以了
离线realfan

只看该作者 7楼 发表于: 2012-12-27
回 4楼(liukang325) 的帖子
可能是MinGW版本不对,用我提供的肯定可以
http://pan.baidu.com/share/link?shareid=174269&uk=673227135
离线kb248
只看该作者 8楼 发表于: 2013-01-04
楼主太感谢你了,Qt4.8.4 终于安装上了!我再请教一个小问题哈,这个在编译的时候一定要选release,这对我程序的正常编译有影响么? 我分不太清楚Debug 和Release的功用!
离线realfan

只看该作者 9楼 发表于: 2013-01-05
回 8楼(kb248) 的帖子
没有影响。QtCreator中可以配置多个编译器,多个Qt版本,多个kits。
Debug版本中,生成的文件包含调试信息,一般没有优化,生成的文件体积比较大,运行效率相对低一些。这个一般在开发人员调试代码时使用。
Release版本是最终交给用户使用的,编译器会做优化,不含调试信息,所以,文件体积较小,运行效率也相对高一些。
离线kb248
只看该作者 10楼 发表于: 2013-01-06
回 9楼(realfan) 的帖子
明白了,谢谢啦!
快速回复
限100 字节
 
上一个 下一个