VS2013 BUG合集

1. 找不到lib文件

原因:配置问题(看看环境变量,VS配置有没有全)

2. x64和x86冲突

一般是库文件和编译环境不匹配(就是把适用于win32环境的库用在了x64环境上)
解决:重新编译一遍库

3. error LINK2019 无法解析外部符号

原因:

  1. 一般是配置里没有包含相应的头文件,可以根据错误提示的名字查找它在哪个文件夹,然后加上相应的库文件。
    例:opencv_contrib-3.0.0(opencv3.0对应的版本)(x64编译配置)+VS2013+cmake
  2. 也有可能是库文件版本不对,32位的库文件用在64位的编译环境,这个时候就需要重新编译配置库。
    Boost库安装及VS2013配置
    VS2013 BUG合集
    这个就是重新编译配置了一遍64位的boost库才解决。

4. 有未经处理异常

生成解决方案没问题,但是无法调试
VS2013 BUG合集
VS2013 BUG合集

5. 未加载wntdll.pdb

编写程序的时候在编译的过程中出现了一个对话框提示程序已经出现一个断点,然后跳转界面提示未加载 wntdll.pdb,无法查找或打开 PDB 文件。
解决:
调试——选项和设置——调试——符号——勾选Microsoft符号服务器
VS2013 BUG合集

6. 无法查找或打开PDB文件

VS2013 BUG合集
出现这种提示并不是代码写错了,而是编译器设置的问题,改一下设置就 OK 了。
参考:VS“无法查找或打开PDB文件”是怎么回事?如何解决

什么是PDB文件

当程序在 VS 上编译时,程序所依赖的所有动态链接库(dll 文件)也会被编译,编译过程中每个 dll 都会产生一个pdb文件,又称为“符号文件”,是一个存储数据的信息文件,其包含 dll 库在编译过程的某些调试信息,例如程序中所用到的全局变量、局部变量、函数名以及他们的入口地址等。
pdb 文件主要用于调试程序,多用于当VS中有多个项目,且项目之间互有依赖关系时,使用pdb文件调试程序,往往会事半功倍,初学者一般不会用到。
当使用VS 调试程序时,会默认加载你的程序以及程序依赖的dll库产生的所有pdb文件,但是结果往往是VS自己找不到依赖库的pdb文件,于是就提示给你“无法查找或打开pdb文件”。

解决

我们可以通过对 VS 做适当的设置,使之能够查找到相应的 PDB 文件,具体步骤如下(这里我们以 VS2017 为例进行说明,其它版本的 VS 操作步骤也一样)。

  1. 选择菜单栏中的“调试 --> 选项”,如下图所示:
    VS2013 BUG合集
  2. 弹出“选项”对话框后,选择“调试 --> 常规”,在右侧选项栏中勾选“启用源服务器支持”(包含的 3 个子选项不用勾选),此时会弹出一个安全警报框,选择“是”即可,如下图所示:
    VS2013 BUG合集
  3. 还是在“选项”对话框中,选择“调试 --> 符号”,在右侧选项栏中勾选“Microsoft符号服务器”,此时会弹出一个提示对话框,点击“确定”即可。同时,对于缓存符号的目录,选择图示中的目录即可
    VS2013 BUG合集
  4. 确定之后,重新运行你的程序,首次运行时,由于编译器会加载所有动态链接库的pdb文件,可能会等到几秒钟。程序运行后,之前输出窗口中的“无法查找或打开pdb文件”的提示不见了,如下图所示:
    VS2013 BUG合集
    如上图所示,由于pdb文件,又名“符号文件”,所以“已加载符号”,也就是成功加载了动态链接库对应的pdb文件。
    第一次加载会从服务器下载,如果电脑配置低的话加载会非常卡。一次加载完后可取消掉加载,不影响后续使用。

7. 无法找到“test_vtk.exe”调试信息,或者调试信息不匹配。未使用调试信息生成二级制文件。是否继续调试?

release环境下无法调试,只能直接运行不调试,否则会有以上错误
VS2013 BUG合集

8. 丢失opencv_world300.dll

解决:将……\opencv\opencv\build\x86\vc12\bin下的3个.dll文件复制到C:\Windows\SysWOW64下

9. error 1104:打不开各种.lib文件

原因:编译器没有找到你的lib文件,配置进去就好
例:在VS2013运行obtain_data(用Kinect2.0相机拍照片)调试遇到的问题

10. error LINK1169:找到一个或多个多重定义的符号

原因:问题出现的原因,是因为一个变量在一个头文件声明,但是却在2个及以上的.cpp文件中定义。或者有两个cpp文件都有mian。(后面这个我比较常见,因为经常会在一个工程里测试好几个程序)
解决:一般编译器会告诉你是哪个变量出现问题,你需要定位到那个变量,然后,删除其中一个多余的变量定义
还有一种无奈的解决方法,你打开项目-》配置属性-》连接器-》命令行,输入以下字符串,以允许多重定:
**/force:multiple
参考:error LNK1169: 找到一个或多个多重定义的符号

11. error C1083:无法打开包括文件: “Eigen/Dense”

原因:缺少eigen这个库,不太懂为啥,本来pcl第三方库里有的
解决:参考:(转载)无法打开 Eigen/Dense 等文件
1、下载Eigen,并解压。
1)****:http://download.****.net/download/airaybaiju/10237226
2)官网:http://eigen.tuxfamily.org/index.php?title=Main_Page#Download
VS2013 BUG合集
2、解压之后的文件夹,重命名为 eigen3 。
3、在项目属性-> 配置属性-> vc++目录-> 包含目录,
比如我的eigen3在F:\Eigen install pack\eigen3,包含目录就是:F:\Eigen install pack\eigen3;

12. error C1083: 无法打开包括文件:“opencv2/nonfree/nonfree.hpp”: No such file or directory

原因:这个目录下根本没有nonfree.hpp这个文件。原因是OpenCV3.0升级了,一些包变成额外的,需要自己安装。

opencv从2.x到3.x是一个很大的转变,对于很多功能不完善、性能不稳定的模块,都被方法了extra_modules(扩展模块)里面了。这样倒是稳定了,但是对于我这样的新手,要添加这些扩展模块却是相当的痛苦啊!!因为要用到sift/surf算法,但是3.0以后这些算法都放到了在xfeacture模块中,并不在主模块中,于是我就开始了艰难的配置过程。
—— 来自https://blog.****.net/zy499/article/details/82952229

解决:

  1. 安装配置opencv_contrib
    操作见:
    opencv_contrib-3.0.0(opencv3.0对应的版本)(win32编译配置)+VS2013+cmake
    opencv_contrib-3.0.0(opencv3.0对应的版本)(x64编译配置)+VS2013+cmake
  2. 装好了之后把#include <opencv2/highgui/highgui.hpp> ,也改成了这个文件正确的路径,结果还是没用!
    一气之下我就在我新装的库opencv_contrib-3.0.0下面找到这个文件nonfree.hpp直接把这个文件复制到opencv原来的那个库目录下,然后把#include <opencv2/highgui/highgui.hpp> 路径改掉就好了。

13. (第一个vs的qt工程报错)编译时常报:error LNK1117 : 选项“SUBSYSTEM:[email protected][email protected]

参考:LINK:fatal error LNK1117:选项"SUBSYSTEM:[email protected][email protected]"中的语法错误解决办法
VS2013 BUG合集
解决:项目配置属性”=>“链接器”=>“命令行”,将右侧“其他选项”中的 /SUBSYSTEM:WINDOWS%40QMAKE_SUBSYSTEM_SUFFIX%40 删除
VS2013 BUG合集

14. (第一个vs的qt工程报错)This application failed to start because it could not find or load the Qt platforms plugins

编译好的exe可执行文件,在无qt环境的电脑上运行时,如上报错
参考:This application failed to start because it could not find or load the Qt platforms plugins
解决:将Qt5.7.1\5.7\msvc2013\plugins\platforms目录复制到exe所在文件夹即可。

15. 无法打开源文件,找不到Qt里面的库,程序有好多红色的波浪线

参考:vs2013+QT5.5.0的环境搭建过程和常见错误总结
解决:打开main.cpp,单击生成–>生成解决方案,会有链接错误,因为VS2013找不到QT程序库。
接下来右击项目>t属性>配置属性>C/C++>常规,编辑“附加包含目录”,找到QT的安装目录下的include文件夹的路径,将它添加进“附加包含目录”里面,然后一路确认即可。重新编译程序,编译通过。
注意:如果上一步的Qt Options未配置成功,则在创建这个Qt Applicaiton时候会出现错误:“Unable to find Qt build!”

16. 检测到RuntimeLibrary的不匹配项,值“MTd_StaticDebug"不匹配

VS2013 BUG合集
参考:visual studio 2015中使用opencv时遇到的一些问题
原因:注意到StaticDebug,意识到可能是静态库的问题。最后发现是库文件包含目录里,除了lib以外,还自作聪明的添加了staticslib,删除这个目录包含就没这个问题了,其实我以前在其他版本也包含过,没出过错,可能是版本文件问题。
遇到这类的问题,一定是opencv配置出了错,反复检查。

17. 未加载opencv_core2413.pdb

(虽然我还没遇到过这种问题,但是感觉说的很有道理的样子,先存起来)
参考:visual studio 2015中使用opencv时遇到的一些问题
VS2013 BUG合集
解决:其实当时遇到这个问题解决不了,我就觉得应该用cmake把opencv编译一下生成pdb文件,直接把整个编译好的文件拷到项目中,连路径都不用折腾。但当时cmake失败了(回头会写这个)。
后面在百度的四五页的答案中,终于有人提到了类似的,说直接把这个文件拷到项目文件下或是系统文件里,肯定能直接加载。
为了以后再出现这种问题,我直接把所有的库文件都拷到了系统目录了。x64系统的是c:/Windows:/SySWOW64,32位系统的是c:/Windows:/System32,如下图路径。拷过去之后重启电脑就可以了。也可以拷到项目文件目录里。回头还是想编译一波。

VS2013编译错误:C4996 -D_SCL_SECURE_NO_WARNINGS

参考1:vs error C4996 : -D_SCL_SECURE_NO_WARNINGS
原因:对C++标准库任何可能的不安全的调用都会导致C4996的错误
解决:上策是改实参类型等来规范调用,下策是屏蔽警告。方法如下:
-D即difine a macro定义宏。在属性页、C/C++、预处理器、预处理器定义添加_SCL_SECURE_NO_WARNINGS即可,如图
VS2013 BUG合集
PS:按理说在.cpp文件顶部添加#define _SCL_SECURE_NO_WARNINGS也可,但会有如下警告:
warning C4603: ‘_SCL_SECURE_NO_WARNINGS’ : macro is not defined or definition is different after precompiled header use
故还是优先使用第一种方法吧。
参考2:VS2013编译错误:-D_SCL_SECURE_NO_WARNINGS解决方案
VS2013 BUG合集

18. error MSB8031: Building an MFC project for a non-Unicode character set is deprecated.

参考:解决:错误 1 error MSB8031: Building an MFC project for a non-Unicode character set is deprecated.
原因:VS2013及以上版本,缺少MFC MBCS DLL加载项。其中MBCS为多字节字符编码。
解决:
a.点击http://go.microsoft.com/fwlink/p/?LinkId=286820
b.选择所对应的VS版本。
c.点击 Multibyte MFC Library for Visual Studio 2013、2015(根据自己版本所定)
d.选择中文,下载,安装。
注意:安装过程需要以管理员身份运行。
插件下载下来安装好,重启VS2013,就没错误啦!
下载路径:https://www.microsoft.com/zh-CN/download/details.aspx?id=40770