QT静态编译及在VS2008中的详细配置——纠正了网上静态编译资料的错误

Windows下编写的QT程序拿到别的机器上运行时总是要打包DLL,编译成静态程序更方便一些。
 
第一步:编译前先修改一下spec:(下面是对于vs2008,如果是2005,则去找win32-msvc2005)
打开文件mkspecs ----> win32-msvc2008 ----> qmake.conf ,然后
修改QMAKE_CFLAGS_RELEASE = -O2 -MD ----->QMAKE_CFLAGS_RELEASE = -O2 -MT
修改QMAKE_CFLAGS_DEBUG  = -Zi -MDd------>QMAKE_CFLAGS_DEBUG  = -Zi -MTd
修改这儿是因为Qt configure时的static选项对核心库无效,核心库仍然是动态链接的。另外-Zi也可以去掉,不生成pdb文件,如果不调试Qt内部就没必要要。

 

第二步:执行:
configure -platform win32-msvc2008 -debug-and-release -static -fast -qt-sql-sqlite -no-webkit

 

第三步:然后进入src执行(一定要进入src,否则会编译很长时间,而且在编译一小时左右发生错误)
nmake
等待个1,2小时的编译,生成一堆的.lib文件。如果需要webkit就不要加-no-webkit参数
这一过程需要注意:由于vs2008没有将编译器及nmake添加到环境变量,如果直接用cmd进入qt文件下进行configure会失败,为此,可以从开始菜单中找到vs2008的命令行工具,在命令行工具下进去qt的安装环境进行configure即可,等待configure完成之后执行nmake就可以了,其中configure的过程是非常快的,nmake就比较慢了,最好nmake之后就睡一觉或者出去溜达溜达,一两个小时后回来就行了。

第四步:安装QTAdd-in,在官网上可以下载,google中搜索也可以找到

第五步:在vs中创建QT项目并修改工程的属性:
配置属性 ----> C/C++ ----> 代码生成 ---->运行时库 ----> /MT or /MTd
另外链接期间可能会出现重复定义的问题,大体上是与LIBCMT.lib发生冲突,这时在项目中忽略特定库中设置LIBCMT.lib即可。

 

这样,QT就完成了静态编译并成功的配置到了VS2008中,但是QT工程中有个.ui文件,这时候双击会出现
no default version found. xxxxxxxxxxxxx
这是因为上面的编译方式没有编译qt designer,在qt安装目录下的bin目录中没有qtdesigner.exe,我没有再去编译,而是下载了QT for VS2008的sdk,安装后将release版本的dll和qtdesigner拷贝到了我们静态编译的bin目录下,然后卸载了该SDK,卸载后需要在项目的QT菜单中的QT Options中设置QT版本,版本就是版本号,这里是4.7.3,路径就是QT的安装目录,在下面的Default中设定版本号(我的是4.7.3)即可。

由于在网上搜索了一系列资料后没能顺利完成静态编译,感觉不太爽,这里重新纠正了静态编译中的部分问题,希望对QT研究者能有些帮助

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值