VS2015调试过程中的问题和解决

  1. 为项目添加所需的头文件和库文件
添加头文件:选中项目,右击选属性,选择C/C++->所有选项->附加包含目录,将所需添加的头文件路径加入;
添加库:在链接器中的附加库目录中添加需要的库所在目录,此外还需在链接器->输入->附加依赖项中将库文件添加进去。
  1. Fatal error C1900: “P1”(第“20150812”版)和“P2”(第“20130802”版)之间 IL 不匹配
原因:链接时使用了由更新版本编译的库文件,与当前的编译链接工具不匹配。
解答:两种方法
a.升级当前的编译链接工具,使其与库文件相匹配;
b.使用当前的编译链接工具重新对库文件进行编译
参考博客:http://blog.csdn.net/cdn_founder/article/details/7741076
我的解决办法:第一种,重新下载安装VS2015 update 3版本
  1. 错误D8016“/ZI”和“/Gy-”命令行选项不兼容
原因:/ZI采用支持“编辑并继续”功能的格式生成程序数据库,如果想使用“编辑并继续”调试,由于它与大部分优化冲突,所以不能与优化选项相兼容。而/Gy-为全程优化,这两者冲突,二选一。
解决:在优化和“编辑并继续调试”之间二选一
  1. Microsoft 官方文档:https://msdn.microsoft.com/library
  2. VS2015 提示 未定义标识符"uintptr_t"
原因:在显示所生成的问题下拉框中选择“仅生成”,不要选则“生成+IntelliSense”。
IntelliSense为智能感知引擎判断的代码语法错误,由于资源有限,会出现误判,可将其选为“仅生成”。
  1. LNK2001无法解析的外部符号__imp__curl_global_init
解决:给工程添加依赖的库:项目->属性->链接器->输入->附加依赖项,把libcurld.lib添加进去,同时加入预编译选项:项目->属性->c/c++->预处理器->预处理器,把 BUILDING_LIBCURL或者CURL_STATICLIB添加上
  1. errorLNK2019: 无法解析的外部符号__imp__ldap_set_optionW,该符号在函数_Curl_ldap 中被引用
这是由于libcurl.lib会链接其他的库,因此把其他库也添加进去,需要添加的库为Wldap32.lib。
  1. error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“MT_StaticRelease”(lib_json.lib)
原因:lib_json.lib库的编译选项为/MT , 而当前工程的编译选项为MDd,应保持一致。
参考博客: http://blog.csdn.net/miyunhong/article/details/5309130
解决:VC项目属性->配置属性->C/C++->代码生成->运行时库 设置为MT
  1. #error:Please use the /MD switch for_AFXDLLbuildsSs
该错误要求我们将运行库设为/MD,由于第八条错误的存在,运行时选项必须为/MT静态编译,此时可以将属性页->配置属性->常规->MFC的使用”改为”在静态库中使用MFC” 即可。
参考博客: https://social.msdn.microsoft.com/Forums/vstudio/en-US/9dc36e13-c3bd-4f47-a105-f1c68f3447ce/please-use-the-md-switch-for-afxdll-builds?forum=vcgeneral
  1. 链接器工具错误LNK2026 XXX模块对于 SAFESEH 映像是不安全的
项目属性->链接器->命令行将/SAFESEH:NO加入附加选项框中
  1. Debug和Release
/GL 为全程优化开关,带有/GL选项开关,生成时不产生调试信息,在配置属性->C/C++->优化->全程优化中设置
/ZL 为生为调试信息开关,两者不可同时使用,在配置属性->C/C++->常规->调试信息格式中设置
在实际使用过程中:
如编译debug版本, 则去掉GL选项(将全程优化中选为否)
如编译release版本,则可去掉ZI选项,重新生成即可
  1. 无法打开包括文件:“winsdkver.h”:No such file or directory
原因:同时安装了VS2010版本和VS2012或者VS2015导致。 VS2012中关于Windows SDK的路径宏定义和VS2010不同,而在某种情况下VS2010的配置串扰到了VS2012。
解决办法:
VS2010中定义包含目录的宏为$(WindowsSdkDir)include,指向的目录是C:\Program Files (x86)\Windows Kits\8.0\Include。而搜索到SDKDDKVer.h文件在C:\Program Files(x86)\Windows Kits\8.0\Include\shared路径下。所以这里应更正为使用VS2012中新的宏定义$(WindowsSDK_IncludePath)。该宏包括了三个路径:
C:\Program Files (x86)\Windows Kits\8.0\Include\um
C:\Program Files (x86)\Windows Kits\8.0\Include\shared
C:\Program Files (x86)\Windows Kits\8.0\Include\winrt
类似还需要更改的是关于库目录的宏定义,VS2010下的$(WindowsSdkDir)lib指向为C:\Program Files (x86)\Windows Kits\8.0\Lib,需要更改为
C:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x86
参考博客: https://blog.csdn.net/qq_26399665/article/details/52383969
由于我没有找到在哪里设置宏定义,因此我直接将该头文件所在目录添加入我的项目中,这样虽然可以解决问题,但是换一个项目时问题仍然存在,不会根本解决问题,所以建议按照参考博客的方法进行彻底解决。
  1. rc.exe已退出,代码为5  
方法有二:
1)将rc.exe所在目录加入到环境变量path中;
2)在项目-->属性-->VC++目录-->可执行文件目录中加入rc.exe所在目录
参考博客: http://www.cnblogs.com/happykoukou/p/6864301.html
  1. RC1015 cannot open include file 'winres.h'.
原因:头文件不存在或者路径设置不对
解决:确保头文件存在,在在项目-->属性-->VC++目录-->包含目录中添加头文件所在目录

【附】 Visual Studio环境变量、工作目录、vc++目录、命令等 的配置和作用

你可能感兴趣的:(VS2015)