设为首页 收藏本站
查看: 833|回复: 0

[经验分享] Windows下Qt静态编译全解

[复制链接]

尚未签到

发表于 2015-12-16 07:53:53 | 显示全部楼层 |阅读模式
  编译准备
  下载NOKIA网站上的QT SDK,解压或安装到相关目录。
本文以QT 4.6.2为例,下载地址:
http://get.qt.nokia.com/qt/source/qt-win-opensource-4.6.2-vs2008.exe

  或者直接下载源码:http://get.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.6.2.zip
  
  
下载后安装好的目录结构为(假设安装到D:\QT):
├─share
├─lib
├─bin
├─mingw
└─qt
   
├─translationsQT语言文件目录)
   
├─toolsQT相关工具源码目录)
   
├─src(源代码目录)
   
├─qmakeqmake源代码目录)
   
├─plugins(图形,数据库等插件目录)
   
├─mkspecs(平台配置文件)
   
├─lib(库文件)
   
├─include(头文件)
   
├─examples(示例程序)
   
├─doc(文档)
   
├─demos(演示程序)
   
├─config.tests
   
├─bin(命令行工具)
   
└─qtc-debugging-helper

  configure配置工具在qt目录,以下假设QTDIR=D:\QT\SDK\qt,编译前最好清空lib,demos,examples,docs四个目录,配置完成后在这几个目录下放一个空的Makefile文件,避免make时报错。
  
VS2005
动态编译

  1.设置VS2005的环境变量
2.
设置目标平台
set QMAKESPEC=win32-msvc2005
3.
进入QTDIR目录运行配置,生成Makefile文件
configure -platform win32-msvc2005 -release -opensource -shared -fast -qt-sql-sqlite -plugin-sql-sqlite -no-qt3support  -qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -no-webkit -qt-style-windowsxp -qt-style-windowsvista
4.
运行nmake /I /K(附带/I /K 选项可以避免出现错误时编译自动终止,用于跳过错误继续编译其它文件)

  经过这样编译的Qt库不依赖mingwm10.dll,libgcc_s_dw2-1.dll,但依赖Qt库的Dll文件和微软的CRT运行时库,使用此Qt库编译Windows平台下的程序,发布时需带上用到的Qt链接库Dll文件和微软的CRT运行时库Dll文件。
  
VS2005
静态编译
VS2008编译同理,启动相应的命令行,设置相应的目标平台,修改相应的配置文件)
1.
设置VS2005的环境变量
2.
设置目标平台
set QMAKESPEC=win32-msvc2005
3.
修改mkspecs/win32-msvc2005目录下的配置文件qmake.conf
将下面两行:
QMAKE_CFLAGS_RELEASE    = -O2 -MD
QMAKE_CFLAGS_DEBUG      = -Zi -MDd
修改为:
QMAKE_CFLAGS_RELEASE    = -O2 -MT
QMAKE_CFLAGS_DEBUG      = -Zi -MTd
D是指dynamicT是指staticd是指debug
4.
进入QTDIR目录,运行配置,生成Makefile文件
set QMAKESPEC=win32-msvc2005
configure -platform win32-msvc2005 -release -no-exceptions -opensource -static -fast -qt-sql-sqlite -plugin-sql-sqlite -no-qt3support  -qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -no-webkit -qt-style-windowsxp -qt-style-windowsvista
5.
运行运行nmake /I /K

  经过这样编译的Qt库不依赖于任何Dll文件(如微软的CRT运行时库),使用此Qt库编译Windows平台下的程序发布时不需要附带任何额外的Dll文件。
  
MinGW
静态编译

  1.设置MinGW的环境变量
2.
设置目标平台
set QMAKESPEC=win32-g++
3.
修改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
然后将下面一行:
QMAKE_LFLAGS_DLL        = -shared
修改为:
QMAKE_LFLAGS_DLL        = -static
4.QTDIR
目录,运行配置,生成Makefile文件
set QMAKESPEC=win32-g++
configure -platform win32-g++ -debug-and-release -no-exceptions -opensource -static -fast -qt-sql-sqlite -plugin-sql-sqlite -no-qt3support  -qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -no-webkit -qt-style-windowsxp -qt-style-windowsvista
5.
运行运行mingw32-make -i -k-i -k选项的含义与上面nmake的相同)

   经过这样编译的Qt库,不依赖任何Dll文件(如mingwm10.dll,libgcc_s_dw2-1.dll),使用此Qt库编译的Windows平台下的程序发布时不需要附带任何额外的Dll文件。
  编译事项说明
  编译完成后可以删除bin目录中所有不是当前编译日期的文件。
  建议编译前移除examplesdemos文件夹的所有文件,避免重编译这两个文件夹,加快编译速度。
  另外,编译命令请根据自己的实际情况配置,上面我的配置是(以VS2005静态编译为例):
-platform win32-msvc2005
目标平台
-release
关闭调试信息
-no-exceptions
除去异常支持
-opensource
开源版
-static
创建静态库
-fast
快速配置,只生成Qt库文件及子目录的Makefile文件,其它的Makefile文件后面再使用qmake生成
-qt-sql-sqlite SQLite
驱动支持
-plugin-sql-sqlite  SQLite
链接插件支持
-no-qt3support  
不编译Qt3兼容库
-qt-zlib zlib

-qt-gif -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg
图形格式插件库
-no-webkit
不编译webkit,此选项可极大加快编译速度,需要使用WebKit的可以删除此选项
-qt-style-windowsxp -qt-style-windowsvista
支持XPVista主题样式

  注意:使用静态编译的程序通常较大,建议发布前使用UPX压缩,一般可以减少至少50%的大小。
  
  以上过程参照http://blog.csdn.net/SysThink/archive/2010/05/15/5596060.aspx的工作。
  
  在运行configure的时候,可能会遇到这样的问题:
  Could not find mkspecs for your QMAKESPEC(win32-g++) after trying:
C:/qt-greenhouse/Trolltech/Code_less_create_more/Trolltech/Code_less_cre
ate_more/Troll/4.5.0/qt\mkspecs
Error processing project file: C:/Qt/2009.01/qt/projects.pro
Qmake failed, return code 3

  实际上Qt并不是装在C:/qt-greenhouse/Trolltech/Code_less_create_more/Trolltech/Code_less_create_more/Troll/4.5.0/目录下的,但是无论怎么修改配置都是不对。然后我找到了一种解决办法:
  mkdir C:\qt-greenhouse\Trolltech\Code_less_create_more\Trolltech\Code_less_create_more\Troll\
  junction C:\qt-greenhouse\Trolltech\Code_less_create_more\Trolltech\Code_less_create_more\Troll\4.5.0 :\Programmation\2009.01
  configure -release -static -fast -accessibility -no-qt3support -no-stl -no-phonon -no-scripttools -no-openssl -no-opengl
  mingw32-make
  
  解释一下:
  这个就是创建configure需要的目录,然后从我们实际安装路径链接过去。
  其中junction可以在http://www.qtforum.org/index.php?page=ExternalLink&url=http%3A%2F%2Ftechnet.microsoft.com%2Fen-us%2Fsysinternals%2Fbb896768.aspx下载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-151721-1-1.html 上篇帖子: windows驱动开发优秀博客 下篇帖子: Windows DDE通讯
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表