QT WindowsVS2010平台自行编译SDK的必要性验证
2012-12-18 20:13
232 查看
文章原创,转载请注明出处
之前一直很迷惑到底需不需要自己把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开发插件中添加上这两个版本
![](http://img.my.csdn.net/uploads/201212/18/1355833306_3711.jpg)
然后先用自己编译得到的4.8.0版本对systray项目进行release生成,项目设置为静态运行库。
![](http://img.my.csdn.net/uploads/201212/18/1355833306_4542.jpg)
然后打开生成目录
![](http://img.my.csdn.net/uploads/201212/18/1355833306_5311.jpg)
打开systray.exe运行之,运行正常,除了没有正确显示图片
![](http://img.my.csdn.net/uploads/201212/18/1355833306_2670.jpg)
然后用VS2010的Dependency Walker查看程序的依赖库如下:
![](http://img.my.csdn.net/uploads/201212/18/1355833306_2254.jpg)
接下来关闭项目,用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则编译通过
![](http://img.my.csdn.net/uploads/201212/18/1355833324_1881.jpg)
但是运行编译生成后的systray.exe却提示如下错误
![](http://img.my.csdn.net/uploads/201212/18/1355833324_2907.jpg)
查看程序的依赖库发现确实缺少了这两个动态库
![](http://img.my.csdn.net/uploads/201212/18/1355833324_1688.jpg)
必须要将4.8.4 SDK中的这两个库文件拷贝到程序路径才能正常运行
![](http://img.my.csdn.net/uploads/201212/18/1355833324_2060.jpg)
由此可以见官方提供的编译后的SDK只是使其不依赖VC 的C运行库,保留了QT对应的动态库的依赖。
相关文章推荐
- qt5.4.0在windows,32位下的编译, vs2010平台
- 解决在windows下VS2010编译coldet20的出现的错误:error MSB8008: 指定的平台工具集(Windows7.1SDK)未安装或无效。请确保选择受支持的 PlatformToo
- 解决在windows下VS2010编译coldet20的出现的错误:error MSB8008: 指定的平台工具集(Windows7.1SDK)未安装或无效。
- VS2010编译报错 指向$(WindowsSdkDir)include/objidl.h C2061 __RPC__out_xcount_part未定义
- 在Windows Qt-4.8.x平台上编译Qt-5.0+ WebKit(即qtwebkit-2.3.x) Debug版注意事项
- 亲测 vs2010 + qt-opensource-windows-x86-vs2010-4.8.6 纯静态库编译
- Qt5.0.2 + MinGw4.7 编译出来的程序,在windows平台下的发布与打包程序
- Linux下编译静态MinGW环境,编译windows平台Qt程序(使用MXE)
- Windows平台下搭建Qt编译环境(VS2008)
- .NET编译项目时出现《此实现不是 Windows 平台 FIPS 验证的加密算法的一部分》处理方法
- Windows平台 Qt 编译静态库的方法
- Windows平台交叉编译Arm Linux平台的QT5.7库
- Windows平台下使用VS2012编译Qt-4.8.7源代码及单独编译qtwebkit-2.3.4
- qt编译mysql驱动-------windows平台和linux平台
- VS2015编译错误:调用的目标发生了异常--->此实现不是Windows平台FLPS验证的加密算法的一部分。
- Windows平台vlc-qt的编译和使用
- .NET编译项目时出现《此实现不是 Windows 平台 FIPS 验证的加密算法的一部分》处理方法
- Windows编译64位QT并使用VS2010开发
- 解决Qt5在Windows平台MSVS2010编译缺少Platform Plugin的Issue
- Android 编译出自己的sdk 以编译自己的windows平台 adb.exe为例