升级项目到Vs2015版本的问题整理

来源:互联网 发布:java科学计算器源代码 编辑:程序博客网 时间:2024/05/14 17:33
提前说明,我升级的项目是从Vs2010升级到Vs2015的,这个过程中遇到许多问题这里整体作了一个整理。
以下整理内容仅供参考,如果不能正常解决,请参考其他内容,也谢谢大家的分享。

1、拿到手的项目你要确定在原来的环境下是可以正常编译通过的。
2、用VS2015打开你的解决方案或者是项目,在要升级的项目上单击鼠标右键,在弹出的菜单中选择“升级VC++编译器和库”菜单,效果如下图:
这时会弹出如下窗口:

如果你已经确定升级了,直接单击“确定”按钮即可。

3、上面的设置好后,你可以直接编译当前项目了,如果你原来项目中使用了一些老旧的函数,可能会出现如下问题:


出现这个问题,是因为微软从2012版本开始就默认为项目开启了SDL安全检查功能,一些老旧的项目可能是忽略这个选项的,这里给大家提供几个方式去解决这个问题:
3.1 在项目属性中选择 “ C/C++” -> “SDL检查” -> "否(/sdl)" ,最后“应用”“确定”

注:上面的设置在一些项目中可能可以解决上面的旧函数报错问题,有就遇到过了,第一天可以正常编译通过,第二天编译就不能正常编译通过。

3.2 根据提示我们可以添加相应的预编译宏“_CRT_SECURE_NO_WARNINGS",添加方式如下:

注:这个方式是参考网上的内容设置的,不过在我的项目中没有起到作用,这里也记录一下,万一别人通过了呢!

3.3 这个方式也是定义一个宏来解决这个问题,但是需要修改“stdafx.h”这个文件,可以在文件中添加如下宏:
#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
为了支持旧版本建议使用下面的方式,这里的_MSC_VER 是Vs的编译器版本1700是2012版本的:

注:这个方式在我的项目好用,但并不代表再你们的项目中可以能过。

4、关于使用Boost库时出现的问题,类似内容如下:
std::copy::_Unchecked_iterators::_Deprecate': Call to 'std::copy' with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators' VisDataDefine c:\program files (x86)\microsoft visual studio 14.0\vc\include\xutility 2372

这里给大家分享一个方式,解决方式如下图:

注:个人感觉出现这个问题的原因也是因为SDL检查的原因引起的,我在把SDL检查关闭时,上面这个选项不用添加也是可以直接编译通过的。所以感觉本质上还是需要SDL检查的原因引起的。

5、解决方案配置方式引起的编译不通过问题,一些项目在Vs2010中使用Debug和Unicode Debug都可以编译通过,但是切换到Vs2015中使用时,会发现使用Unicode方式进行编译时是编译通不过的,即使编译通过了,再引用库中也会出现一些未知错误,就比如前设置SDL检查问题,我就有遇到了Vs2010项目使用Unicode和非Unicode都可以编译通过,而迁移到Vs2015中,按照上面方式设置后,一些库使用Unicode进行编译时也可以通过,但时在被引用库中怎么设置都不起作用,还会出现一些字符串函数出现未被标识定义的问题出现。一次无意的切换了一下配置方式,使用非Unicdoe进行编译经通过了。所以写在了这里给大家进行分享一下。

6、注意函数
在VS2010中一些函数在Vs2015中已经进行了为优化调整,这样就导致我们的项目不能正常编译通过,这里罗列一些遇到的函数:

6.1 使用 greater<int>() 编译不通过,

经过神起的度娘之后,有人回复这问题是因为从2012之后的VS版本之后,greater的头文件位置发生了改变,这时我们可以按下面的方式去加一下头文件,代码语句如下:

6.2标准库中std::make_pair,可以使用std::pair(t1, t2)来进行替换

0 0
原创粉丝点击