QT WindowsVS2010平台自行编译SDK的必要性验证

文章原创,转载请注明出处

 

之前一直很迷惑到底需不需要自己把QTSDK 编译一下以便得到静态编译的版本,于是将自行编译的SDK和官方提供的VS2010下编译好的进行了一下对比,发现确实如果要得到彻底静态发布的版本,要自行编译一下SDK。

这里以QT SDK目录中Sapmle中的systray项目为例。

使用了VS插件1.1.10

http://releases.qt-project.org/vsaddin/qt-vs-addin-1.1.10-opensource.exe

首先安装了4.8.4的官方window VS2010 SDK版本

http://qt-project.org/downloads

http://releases.qt-project.org/qt4/source/qt-win-opensource-4.8.4-vs2010.exe

然后又自行编译了4.8.0版本,

http://download.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.8.0.zip

编译方法参考http://www.cnblogs.com/elect-fans/archive/2012/03/29/2422816.html

然后在VS2010 QT开发插件中添加上这两个版本

然后先用自己编译得到的4.8.0版本对systray项目进行release生成,项目设置为静态运行库。

然后打开生成目录

打开systray.exe运行之,运行正常,除了没有正确显示图片


然后用VS2010的Dependency Walker查看程序的依赖库如下:


接下来关闭项目,用4.8.4版本的QT打开并进行同样设置,生成对应的release程序,结果生成失败:

1>msvcrt.lib(ti_inst.obj): error LNK2005: "private: __thiscall type_info::type_info(class type_infoconst &)" (??0type_info@@AAE@ABV0@@Z) 已经在 LIBCMT.lib(typinfo.obj) 中定义

1>msvcrt.lib(ti_inst.obj): error LNK2005: "private: class type_info & __thiscall type_info::operator=(classtype_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) 已经在 LIBCMT.lib(typinfo.obj) 中定义

1>LIBCMT.lib(crt0init.obj): warning LNK4098: 默认库“msvcrt.lib”与其他库的使用冲突;请使用 /NODEFAULTLIB:library

1>release\\systray.exe: fatal error LNK1169: 找到一个或多个多重定义的符号

通过在项目属性-配置属性-链接器-输入-忽略特定的库:msvcrt.lib则编译通过


但是运行编译生成后的systray.exe却提示如下错误


查看程序的依赖库发现确实缺少了这两个动态库


必须要将4.8.4 SDK中的这两个库文件拷贝到程序路径才能正常运行


由此可以见官方提供的编译后的SDK只是使其不依赖VC 的C运行库,保留了QT对应的动态库的依赖。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值