OPENCV 链接错误 - Win32 & VS2012
Posted
技术标签:
【中文标题】OPENCV 链接错误 - Win32 & VS2012【英文标题】:OPENCV linking Error - Win32 & VS2012 【发布时间】:2015-02-20 08:35:19 【问题描述】:我已经构建了 alpha 和 beta 版本的 openCV 3.0.0。但每次我运行我的项目时,我都会收到此错误,仅适用于“imread”功能:
error LNK2019: unresolved external symbol "class cv::Mat __cdecl cv::imread(class cv::String const &,int)" (?imread@cv@@YA?AVMat@1@ABVString@1@H@Z) referenced in function _main ...
这是我的代码:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <stdlib.h>
#include <stdio.h>
using namespace cv;
int main()
Mat a=Mat::zeros(10,10,0);
Mat b;
b=imread("Mu.jpg");
imshow("s",a);
waitKey(1000);
当我删除“imread”功能时,它工作正常。构建和运行没有错误并显示黑色小图像(来自“A”矩阵) 我已经从头开始重新构建解决方案和 OpenCV,但仍然出现此错误。
我正在使用 VS2012,并且在项目的属性表中添加了包含和 lib 路径。 有人可以帮忙吗?
【问题讨论】:
imread 在 3.0 中从 highgui 移到了 imgcodecs,因此,不同的头文件/库 非常感谢!!修好了!!!它是有线的,因为imread
签名也在highgui头中,所以只需要更改lib文件,我想它可以算作bug...
" 因为 imread 签名也在 highgui 标头中" - 我想,这更有助于过渡
【参考方案1】:
imread
函数已移至 imgcodecs
库,因此您必须包含它:
对于 MSVC 用户: 将“opencv_imgcodecs300d.lib”添加到“配置属性->链接器->输入->附加依赖项”并包括“#include”
对于 Qt 用户:对于 Qt IDE 用户,将 -lopencv_imgcodecs300d
或 -lopencv_imgcodecs300
添加到您的 .pro 文件中
和#include <opencv2/imgcodecs/imgcodecs.hpp>
到你的主文件
注意: lib 名称中的数字 300 应更改以匹配所使用的 OpenCV 版本。
【讨论】:
【参考方案2】:这个未解决的外部符号链接器错误基本上是在编译器无法获得声明的函数的定义时出现的。
所以请确保您在代码中的某处定义了imread("Mu.jpg")
,然后尝试编译它。
检查您是否已正确链接库,如果您使用的是 opencv2.2,link 可能会很有用。
【讨论】:
imread()
是 supposed 是 opencv2 库的一部分,假设它被正确链接,发布的错误不应该发生。这不是用户应该定义的东西。
我怎样才能确定它被正确链接了? “imshow”的链接和执行还不够吗?以上是关于OPENCV 链接错误 - Win32 & VS2012的主要内容,如果未能解决你的问题,请参考以下文章
Opencv3.1.0 & Win10/Win7 64位 contrib编译