VS2013 BUG合集

VS2013 BUG合集

  • 一、生成解决方案出错(编译出错)
    • 1. 找不到lib文件
    • 2. x64和x86冲突
    • 3. error LINK2019 无法解析外部符号
    • 4. 无法查找或打开PDB文件
      • 什么是PDB文件
      • 解决
    • 5. 丢失opencv_world300.dll
    • 6. error 1104
      • 打不开各种.lib文件
      • 无法打开所在工程的exe文件
    • 7. error LINK1169:找到一个或多个多重定义的符号
    • 8. error LINK2005:已定义,重复定义
    • 9. error C1083:无法打开包括文件: “Eigen/Dense”
    • 10. error C1083: 无法打开包括文件:“opencv2/nonfree/nonfree.hpp”: No such file or directory
    • 11. error C1083 无法打开包括文件: “boost/shared_ptr.hpp”: No such file or directory
    • 12. (第一个vs的qt工程报错)编译时常报:error LNK1117 : 选项“SUBSYSTEM:WINDOWS@QMAKE_SUBSYSTEM_SUFFIX@”
    • 13. (第一个vs的qt工程报错)This application failed to start because it could not find or load the Qt platforms plugins
    • 14. 无法打开源文件,找不到Qt里面的库,程序有好多红色的波浪线
    • 15. 检测到RuntimeLibrary的不匹配项,值“MTd_StaticDebug"不匹配
    • 16. 未加载opencv_core2413.pdb
    • 17. error C4996: -D_SCL_SECURE_NO_WARNINGS
    • 18. error:C4996 ×× is deprecated, please use the ×× function instead.
    • 19. error MSB8031: Building an MFC project for a non-Unicode character set is deprecated.
    • 20. error C2056:"M_PI"未声明的标识符
    • 21. error LNK1561: 必须定义入口点
  • 二、编译没问题,调试有问题
    • 1. opencv_world300.dll 处有未经处理的异常
    • 2. 有未经处理异常
    • 3. 未加载wntdll.pdb
    • 4. 无法找到“test_vtk.exe”调试信息,或者调试信息不匹配。未使用调试信息生成二级制文件。是否继续调试?
    • 5. 应用程序无法正常启动(0xc000007b)(未解决!!!)
    • 6. Debug Assertion Failed!
  • 7. Expression: ("Buffer too small",0)
  • 8. Expression: vector subscript out of range
    • 9. Error: no override found for 'vtkPolyDataMapper'.

一、生成解决方案出错(编译出错)

1. 找不到lib文件

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

2. x64和x86冲突

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

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

原因:

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

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

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

5. 丢失opencv_world300.dll

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

6. error 1104

打不开各种.lib文件

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

无法打开所在工程的exe文件

错误 4 error LNK1104: 无法打开文件“E:\Program\Project\2_boundaryestimation_ICP\me\rotation_boundaryestimation_icp\Debug\rotation_boundaryestimation_icp.exe”
解决:这种情况一般 就是上一次调试打开的exe文件没关闭,关掉重新调试就行了。如果关掉了还有这个提示,就把工程都关了重新打开调试就行了。

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

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

8. error LINK2005:已定义,重复定义

原因:可能是因为配置库有重复的地方,比如boost在pcl里有配置过,后来自己编译的又配置了一遍

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

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

10. 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.csdn.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 ,也改成了这个文件正确的路径,结果还是没用!
    一气之下我就在我新装的库opencv_contrib-3.0.0下面找到这个文件nonfree.hpp直接把这个文件复制到opencv原来的那个库目录下,然后把#include 路径改掉就好了。

11. error C1083 无法打开包括文件: “boost/shared_ptr.hpp”: No such file or directory

原因:配置问题,这里应该是F:\PCL1.8.0\3rdParty\Boost\include\boost-1_59
VS2013 BUG合集_第8张图片
参考:“错误 C1083 无法打开包括文件: “boost/shared_ptr.hpp”: No such file or directory”解决办法

12. (第一个vs的qt工程报错)编译时常报:error LNK1117 : 选项“SUBSYSTEM:WINDOWS@QMAKE_SUBSYSTEM_SUFFIX@”

参考:LINK:fatal error LNK1117:选项"SUBSYSTEM:WINDOWS@QMAKE_SUBSYSTEM_SUFFIX@"中的语法错误解决办法
在这里插入图片描述
解决:项目配置属性”=>“链接器”=>“命令行”,将右侧“其他选项”中的 /SUBSYSTEM:WINDOWS%40QMAKE_SUBSYSTEM_SUFFIX%40 删除
在这里插入图片描述

13. (第一个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所在文件夹即可。

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

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

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

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

16. 未加载opencv_core2413.pdb

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

17. error 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合集_第10张图片
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合集_第11张图片

18. error:C4996 ×× is deprecated, please use the ×× function instead.

error C4996: ‘pcl::ConditionalRemoval::ConditionalRemoval’: ConditionalRemoval(ConditionBasePtr condition, bool extract_removed_indices = false) is deprecated, please use the setCondition (ConditionBasePtr condition) function instead.
简单的条件滤波就出现上面这个错误
解决:属性——C/C++——常规 SDL检查改为“否”就可以了
原因:
参考:windows安全警告与SDL检查
vs解决无符号类型,安全开发生命周期(SDL)检查
大概好像就是SDL(安全开发生命周期)检查这个功能是微软新推出的,为了能更好的监管开发者的代码安全,如果勾选上这一项,那么他将严格按照SDL的规则编译代码,会有一些以前常用的函数无法通过编译,比如在VS2010中的scanf是warning那么在VS2012中就是error了。
还有下面这些情况,本来应该是警告的,但是开启SDL检查之后,就会视为错误,编译报错
VS2013 BUG合集_第12张图片

19. 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

20. error C2056:"M_PI"未声明的标识符

lntelliSense:未定义标识符“M_PI”
学习eigen库用到M_PI,以前程序里也用到了,没有报错,鼠标放上去还会显示(程序前面也没有宏定义啥的,也没加多余的头文件啊)
在这里插入图片描述
VS2013 BUG合集_第13张图片
但是新程序里也有,就报错了,无奈,不知道为啥
解决:
VS2017 C++ 程序报错“error C2065: “M_PI”: 未声明的标识符"
项目——>”XXX属性"——>配置属性——>C/C++——>预处理器——>预处理器定义,将“_USE_MATH_DEFINES”添加进去

21. error LNK1561: 必须定义入口点

每个应用程序(文件格式为exe)都应该有个启动点,这个点就是main函数。缺少就会出现link error 。
但是我有呀,后来发现是“main"拼写错了!!!

二、编译没问题,调试有问题

1. opencv_world300.dll 处有未经处理的异常

原因:样子和下面问题一样的,后来发现是release和debug的lib文件配置到一起的原因,之前因为看到安装库里文件都在一起,路径是一个,之前测试的时候放在一起也没问题,现在莫名其妙又不可以了,唉,不过解决了问题就好!


转载:[opencv imwrite报错:关于opencv_world300.dll](https://blog.csdn.net/sanningjing/article/details/55261469)

重新学习opencv,载入/显示图像都没有问题,加入imwrite后,程序报错,报错如下,直接上图:

VS2013 BUG合集_第14张图片

原因是lib文件配置问题。

解决方法如下:

删除配置中的realse版本需要的lib文件。同样的问题,还出在X86/X64文件不能同时载入的问题。如果 有问题,就删除一个,如果无问题,就正常使用吧。

我用过两台机子,一台同时都配置没有问题,一台就有问题。

VS2013 BUG合集_第15张图片



解决:opencv配置中链接器-输入-附加依赖项里realease的lib文件都删掉就好了

2. 有未经处理异常

生成解决方案没问题,但是无法调试
VS2013 BUG合集_第16张图片
VS2013 BUG合集_第17张图片

3. 未加载wntdll.pdb

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

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

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

5. 应用程序无法正常启动(0xc000007b)(未解决!!!)

惊天大BUG!
我测试64位的PCL库时出现的,以为是PCL安装或者配置的不对,后来又回头测试vtk64位的时候,之前测试没问题运行成功的,结果这次就不行,载在这个BUG上了。我还解决不了,合理推测,其他库64位环境估计也运行不成功。我费了半天劲配置的估计不能用了,允悲!!!
挣扎过程见:PCL1.8.0测试

6. Debug Assertion Failed!

Expression: _pFirstBlock == pHead
VS2013 BUG合集_第20张图片
中止后:
VS2013 BUG合集_第21张图片
原因:参考:
Debug Assertion Failed! Expression: _pFirstBlock == pHead
【Debug Assertion Failed!Expression:_pFirstBlock == pHead vs2013编程错误】
我之前遇到过要改MTd的问题,但是没啥用,会有死循环,和上述参考的博主一样的问题,所以这次没有改。
Debug Assertion Failed!查找问题所在方法
上面这个是大佬的方法,完全不懂,先放着吧
解决:上面有说到混用release和debug文件,所以我又检查了一遍配置,发现没什么用。再出现问题,我直接点忽略,一直忽略,好像也可以出结果,没啥影响哈哈哈
2020.6.2
由于我实在是没办法了,现在一个简单的读取ply文件,显示点云的程序都会出这个错误,于是又搜了点解决方法,有几个是说opencv和VS版本对应不上,我检查的一下好像没啥错,VS2013对应的vc12。后来死马当活马医的试了一下把MTd改成MDd,居然没报错?居然还成功了!
工程上右键-》属性-》C/C++=》所有选项,改成MDd就好了!(就是参考第一个链接)
VS2013 BUG合集_第22张图片
而且我这两个问题也解决了:原来配置的PCL好好的没问题,但是测试的时候莫名其妙就出现这两个问题,感觉是缺少这个boost的lib文件,但是后来单独编译了boost(没有s的和有s的都可以用)配置好加上没有boost的PCL放在一起才没错误,但是会有Debug Assertion Failed!这个问题,改好这个问题之后,再用这个配置好的库,也没有下面这个问题啦!
VS2013 BUG合集_第23张图片

7. Expression: (“Buffer too small”,0)

Kinect获取数据的接口程序,用相机参数自己对齐的程序(KienctThird),毕设的时候忘记有没有问题了,但是这次出现这个BUG:
VS2013 BUG合集_第24张图片
点击重试之后跳转到这里,由上面提示的地方:
File: f:\dd\vctools\crt\crtw32\stdio\vsprintf.c
以及下面跳转的这个文件还有函数,还有这个程序可以显示结果(即显示图片),但当我按空格键要保存的时候就优BUG提示了,综上,我猜测问题出在保存文件的位置,应该是这个函数:springf_s()出了问题
VS2013 BUG合集_第25张图片
然后突然想到我能够运行正常的函数,这里是64,而这个程序写的32,改成64之后就没问题了
在这里插入图片描述
VS2013 BUG合集_第26张图片
(不过不知道为啥,同样的保存文件啊,人家32就可以好好的,我去年做毕设用这个程序的时候估计也有这个问题,但是当时也不知为啥,所以写了备注哈哈哈)

8. Expression: vector subscript out of range

Program: C:\WINDOWS\SYSTEM32\MSVCP120D.dll
File: f:\microsoft visual studio 12.0\vc\include\vector
Line: 1185

VS2013 BUG合集_第27张图片
点击重试,跳转到这里:
VS2013 BUG合集_第28张图片
然后继续运行,出现这个BUG提示:
Program: E:\Program\1_obtain_data\2-obtain_data\Debug\end_obtain_data.exe
File: f:\microsoft visual studio 12.0\vc\include\vector
Line: 1202
Expression: “Standard C++ Libraries Out of Range” && 0
VS2013 BUG合集_第29张图片
点击重试,跳转到这里:
VS2013 BUG合集_第30张图片
然后继续运行,跳转到这里:
0x0196A893 (msvcr120d.dll) (end_obtain_data.exe 中)处有未经处理的异常: 将一个无效参数传递给了将无效参数视为严重错误的函数。
VS2013 BUG合集_第31张图片
VS2013 BUG合集_第32张图片
根据第一次出现的BUG提示,估计又是vector的问题,然鹅我不知道这个vector是干啥用的。
2020.6.8 解决啦!
问题出自Kinect获取数据的接口程序,我想直接把参数保存到点云的xyz坐标,但是就有问题了。当时和不保存为ply点云文件的相同程序对比,那个没有问题,所以问题就出在保存点云文件这里,然后通过注释掉保存ply的语句发现错误不在这,然后注释掉赋值语句之后错误就没有了,所以赋值语句应该是错的。
在这里插入图片描述
这个是我直接复制的我正常运行的程序里的,以为没什么问题,由于没有完全搞懂怎么赋值的,感觉i就是一个摆设,一个公式的模板,就没多想。
后来调试的时候,一到这里就出BUG,然后监视了一下i的值才发现,它太大了,起始值就512*424这么大了,怪不得会溢出。后来发现i这个变量程序前半部分有用到,没有置零,所以就这个样子了,修改之后就没问题啦!
VS2013 BUG合集_第33张图片

9. Error: no override found for ‘vtkPolyDataMapper’.

Generic Warning: In F:\PCLdon\VTK-7.0.0\Rendering\Core\vtkPolyDataMapper.cxx, line 28
Error: no override found for ‘vtkPolyDataMapper’.
在这里插入图片描述
VS2013 BUG合集_第34张图片
解决:
参考:VTK编译中出现 no override found for vtkpolydatamapper 解决方法
程序上面加入一下语句即可

#include "vtkAutoInit.h" 
VTK_MODULE_INIT(vtkRenderingOpenGL2); // VTK was built with vtkRenderingOpenGL2
VTK_MODULE_INIT(vtkInteractionStyle);

你可能感兴趣的:(VS2013,C++)