关于使用VS2015静态编译

首先必须搞清楚项目->项目属性->配置属性->C/C++->代码生成->运行库中四个选项的关系:
多线程调试Dll (/MDd) 对应——-MD_DynamicDebug
多线程Dll (/MD) 对应————-MD_DynamicRelease
多线程(/MT) 对应—————–MD_StaticRelease
多线程(/MTd)对应—————-MD_StaticDebug
在msdn中有详细解释:
http://msdn.microsoft.com/en-us/library/2kzt1wy3(VS.80).aspx

一句话总结就是:D用于动态,T用于静态,带d的是debug模式的 。那么出现类似如下错误信息:

LNK2038 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2”
LNK2038 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MDd_DynamicDebug”

一般就是用Release模式去链接了一个Debug编译出的lib,或者用Debug模式链接了Release编译的lib。因此先检查上面的运行库是否对应正确,release模式一定不能选MDd或MTd的。
若出现下面这种警告信息:
关于使用VS2015静态编译_第1张图片
请检查项目->项目属性->配置属性->链接器->输入->附加依赖项里面是否包含了错误的lib, 文件名中由d结尾的都是debug模式才能链接,没有d的只有release模式才能链接。例如,如OpenCV几个Release编译的lib:

cv210.lib cvaux210.lib cxcore210.lib highgui210.lib ml210.lib

只能在Release模式下链接,对应的Debug版本就是:

cv210d.lib cvaux210d.lib cxcore210d.lib highgui210d.lib ml210d.lib

(PS:事实上经过测试,我的情况是,release和debug模式下都必须链接不带d的lib文件,否则就会出现上述报错,因此各位还是根据自己的实际情况选择,网上说的对你不一定适用,仅供参考)
当上面的问题都解决后,又出现下面这个错误信息的话:

error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“MTd_StaticDebug”

是因为我的项目中不仅用到了VC运行库,还用到了Qt5.6和OpenCV3.0运行库,应该是没有静态库才会无法进行静态编译。解决方案,可以自己编译,也可以下载别人编译好的。
具体参考下面两个链接:
Qt静态编译:
http://blog.csdn.net/wyansai/article/details/51178631
OpenCV3.0静态编译:
http://wenku.baidu.com/link?url=POLa27gr8KnZtj-Kw84XhVesfr_Hl_5eepIXGh7lma3wg9pn0gYCFBW9kwZ4EYDcG9n5Y7K7S3fbm_JT2n-Wmzk0ZiZM-76CV3X52EHGUEG

其他参考资料:

http://blog.csdn.net/u79501/article/details/51437359
http://blog.csdn.net/xiaowei_cqu/article/details/7586449
http://blog.163.com/tab_98/blog/static/1192409720156522432242/

你可能感兴趣的:(c++,Qt5,OpenCV)