在Eclipse开发环境中,使用CDT插件,进行OpenCV编程,发现编译器无法解析函数,甚至是最基本的OpenCV函数,报错:XX unresolved,no such file or directory。
百度一下发现也有不少同行遇到这样的问题,但他们基本上这些都是依赖存来问题,很显然,我的不是。
Sample 1: 依赖冲突
Q:opencv 在64位win7下链接出错:无法解析的外部符号 _cvDestroyWindow等
A:这个问题看起来是依赖库设置出了问题,如果在属性视图中设置好“连接器->输入”还是会出现这个问题,这个时候需要考虑一下是不是多设置了一些文件,导致库文件之间出现冲突:
我因为实在64位win7系统下,所以,设置的时候在每个目录中增加了:.../x64/lib 等64位系统下用到的库文件,如果在win32控制平台下运行程序的话,这样导致出现无法解析opencv中的函数名。所以,不要多加文件路径,导致冲突。
这位博主还说了:
“为了不让每一次都配置这些路径,最好在属性管理器中设置“Microsoft.Cpp.Win32.user”这个属性,这样就不必每次新建工程的时候都去配置相应的opencv文件。”
是个很好的建议!
Sample 2: 缺少依赖项
Q:openCV无法解析的外部符号-CvSVM、HOGDescriptor
A:一般遇到“无法解析的外部符号”问题出自项目中未添加“附加依赖项”。
这位博主还给出了实例,在这里就不引用了,总之,问题就是出在缺少依赖。
总结:
以上两个问题的原因分别是库文件依赖冲突和缺少依赖项,都是可能造成无法解析函数。
此外可能还有一种原因,就是笔者遇到的,OpenCV版本问题。笔者include了2.0版本的头文件,但是用了1.0版本的函数。尽管C++对C语言向下兼容,但使用2.0版本在混合使用1.0版本和2.0编程时,一定要注意两个版本的不同。
推荐资料:
OpenCV.2.Computer.Vision.Application.Programming.Cookbook,Published by Packet Publishing Ltd.,主要是2.0版本的OpenCV,使用C++语言API。下载链接
原文链接:https://www.f2er.com/javaschema/285143.html