其实我不是安装opencv
,而是在另一个下载到的工程里,原作者引入了opencv
的库,像是这样:
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/utility.hpp>
问题:1:我的电脑里压根没有opencv
库,所以要引入opencv
库
我是直接下载了
opencv
的库,丢进包含目录里面,包含目录可以在工程>>属性>>配置属性>>VC++目录>>包含目录
里,点开下拉选项编辑里看到完整的路径,通过这个打开相应的文件夹,把opencv
库丢进去即可,当然,也可以放到自己的工程下,用#include""
双引号的形式引用,或者直接在该工程的属性里的包含目录下再添加opencv
的目录,考虑到,以后下载的工程可能会用到,我就直接丢到编译器的包含目录下了。- 问题1.5 :我第一次导入的是opencv2的库,但实际上你要下载的是
opencv3
的库,因为opencv2
里缺少了一些需要导入的文件,例如需要的core
文件夹里的utility.hpp
文件。而且当下完opencv3
时,会发现,opencv3
里的include
文件夹里的名字,就是opencv2
,= =,像是这样:
opencv\build\include\opencv2
所以解决办法是,要下载opencv3的库并导入。这个问题其实是特别具体的问题,发生在别人身上的概率很低,只是顺便提一下:如果你在别的项目里用到opencv,里面引入了opencv2这个文件夹下面的头文件,并不意味着原来的项目用的是opencv2,因为opencv3里面的包含文件夹下也是opencv2这个文件夹名。
问题2:缺少 cuda_runtime.h
文件。
这个我通过下载安装cuda之后解决了,不用怎么配置,就到官方下载相应的可执行文件,安装以后就解决了。
问题3:PCH 警告
错误(活动) E2902 PCH 警告: 头停止点需要位于全局范围。未生成 IntelliSense PCH 文件。
这个问题,可能是一些类定义或者内联函数后面没有加上;
号,加上就可以了。我记得还有一次我改变了一下include
文件的顺序就解决了。好吧,其实我也不太懂。
问题4:链接错误LNK2001,无法解析外部符号xxx
这种问题,无法解析外部符号的这个符号是最关键的,例如,我的这个错误中,后面显示了发生的位置,但是这可能只是在使用的时候检测到的地方,也就是所,程序执行到这里,突然发现执行不下去了,某些符号解析不了,具体来说,大概率可以归结为某个定义了的函数没有实现这个原因。那么你就顺着这个外部符号,比如我的错误是 无法解析外部符号void __thiscall cv::String::deallocate ...
,那么就说明是这个函数有问题(而不是别的),顺藤摸瓜的,肯定就是opencv
的某些东西没有配置好。我已开始还以为是跟什么__cdecl
或者__thiscall
有关,后来才知道那是函数调用的方式,只是加在前面说明这个函数是怎么调用的……后来又怀疑是不是后面那个发生的地方的某个库或者obj
文件少写了什么,导致某些声明的函数没有实现,由于我的这个项目的这些文件是修改过的,所以我又把原来的这些文件导回来,反复修改来修改去,最后还是错,现在想想真是让人哭笑不得。实际上,如果是源码生成的obj
文件没有实现,那么编译一定是不会过的,因此这种情况大概率是某个库,你只导入了头文件(这里面有声明),而没有实现(实现一般在一些lib
文件里)。好了搞清楚这些问题,那就是要引入这些lib
文件,在属性>>VC++>>附加库目录
里,把你的那个库目录添加进去,再在链接器>>输入>>附加依赖项
把那些库的具体名字输入进去就可以了。仅此两步,就这么简单。但是,还要注意的是,库(lib)是已经编译出来的一些obj
文件的集合,那么他们在编译时是用64位编译还是用32位编译时有区别的,因此,你自己编译的时候也要注意,最好的办法是,例如我在vs2017平台下,我就把debug/release
、win32/x64
的四种组合都按照上述的两步设置一遍即可。