OpenCV VideoCapture链接器报错 error LNK2019: 无法解析的外部符号

V+ 2017-08-15 10:54:39
我是VS2015, OpenCV2.4.13.2 配置使用的是静态库staticlib, 流程无误, 测试普通的绘图程序没有问题, 但就是调用摄像头部分VideoCapture相关的都不能用, 怎么解决, 坐等大神
下面是20条报错信息

1>opencv_highgui2413d.lib(cap_vfw.obj) : error LNK2019: 无法解析的外部符号 _ICOpen@12,该符号在函数 "public: virtual struct _IplImage * __thiscall CvCaptureCAM_VFW::retrieveFrame(int)" (?retrieveFrame@CvCaptureCAM_VFW@@UAEPAU_IplImage@@H@Z) 中被引用
1>opencv_highgui2413d.lib(cap_vfw.obj) : error LNK2019: 无法解析的外部符号 _ICClose@4,该符号在函数 "protected: void __thiscall CvCaptureCAM_VFW::closeHIC(void)" (?closeHIC@CvCaptureCAM_VFW@@IAEXXZ) 中被引用
1>opencv_highgui2413d.lib(cap_vfw.obj) : error LNK2019: 无法解析的外部符号 _ICSendMessage@16,该符号在函数 "protected: void __thiscall CvCaptureCAM_VFW::closeHIC(void)" (?closeHIC@CvCaptureCAM_VFW@@IAEXXZ) 中被引用
1>opencv_highgui2413d.lib(cap_vfw.obj) : error LNK2019: 无法解析的外部符号 _ICDecompress,该符号在函数 "public: virtual struct _IplImage * __thiscall CvCaptureCAM_VFW::retrieveFrame(int)" (?retrieveFrame@CvCaptureCAM_VFW@@UAEPAU_IplImage@@H@Z) 中被引用
1>opencv_highgui2413d.lib(cap_vfw.obj) : error LNK2019: 无法解析的外部符号 _AVIFileInit@0,该符号在函数 "void __cdecl icvInitCapture_VFW(void)" (?icvInitCapture_VFW@@YAXXZ) 中被引用
1>opencv_highgui2413d.lib(cap_vfw.obj) : error LNK2019: 无法解析的外部符号 _AVIFileRelease@4,该符号在函数 "public: virtual void __thiscall CvCaptureAVI_VFW::close(void)" (?close@CvCaptureAVI_VFW@@UAEXXZ) 中被引用
1>opencv_highgui2413d.lib(cap_vfw.obj) : error LNK2019: 无法解析的外部符号 _AVIFileOpenA@16,该符号在函数 "public: virtual bool __thiscall CvCaptureAVI_VFW::open(char const *)" (?open@CvCaptureAVI_VFW@@UAE_NPBD@Z) 中被引用
1>opencv_highgui2413d.lib(cap_vfw.obj) : error LNK2019: 无法解析的外部符号 _AVIFileGetStream@16,该符号在函数 "public: virtual bool __thiscall CvCaptureAVI_VFW::open(char const *)" (?open@CvCaptureAVI_VFW@@UAE_NPBD@Z) 中被引用
1>opencv_highgui2413d.lib(cap_vfw.obj) : error LNK2019: 无法解析的外部符号 _AVIFileCreateStreamA@12,该符号在函数 "protected: bool __thiscall CvVideoWriter_VFW::createStreams(struct CvSize,bool)" (?createStreams@CvVideoWriter_VFW@@IAE_NUCvSize@@_N@Z) 中被引用
1>opencv_highgui2413d.lib(cap_vfw.obj) : error LNK2019: 无法解析的外部符号 _AVIStreamRelease@4,该符号在函数 "public: virtual void __thiscall CvCaptureAVI_VFW::close(void)" (?close@CvCaptureAVI_VFW@@UAEXXZ) 中被引用
1>opencv_highgui2413d.lib(cap_vfw.obj) : error LNK2019: 无法解析的外部符号 _AVIStreamInfoA@12,该符号在函数 "public: virtual bool __thiscall CvCaptureAVI_VFW::open(char const *)" (?open@CvCaptureAVI_VFW@@UAE_NPBD@Z) 中被引用
1>opencv_highgui2413d.lib(cap_vfw.obj) : error LNK2019: 无法解析的外部符号 _AVIStreamSetFormat@16,该符号在函数 "protected: bool __thiscall CvVideoWriter_VFW::createStreams(struct CvSize,bool)" (?createStreams@CvVideoWriter_VFW@@IAE_NUCvSize@@_N@Z) 中被引用
1>opencv_highgui2413d.lib(cap_vfw.obj) : error LNK2019: 无法解析的外部符号 _AVIStreamWrite@32,该符号在函数 "public: virtual bool __thiscall CvVideoWriter_VFW::writeFrame(struct _IplImage const *)" (?writeFrame@CvVideoWriter_VFW@@UAE_NPBU_IplImage@@@Z) 中被引用
1>opencv_highgui2413d.lib(cap_vfw.obj) : error LNK2019: 无法解析的外部符号 _AVIStreamGetFrameOpen@8,该符号在函数 "public: virtual bool __thiscall CvCaptureAVI_VFW::open(char const *)" (?open@CvCaptureAVI_VFW@@UAE_NPBD@Z) 中被引用
1>opencv_highgui2413d.lib(cap_vfw.obj) : error LNK2019: 无法解析的外部符号 _AVIStreamGetFrame@8,该符号在函数 "public: virtual bool __thiscall CvCaptureAVI_VFW::grabFrame(void)" (?grabFrame@CvCaptureAVI_VFW@@UAE_NXZ) 中被引用
1>opencv_highgui2413d.lib(cap_vfw.obj) : error LNK2019: 无法解析的外部符号 _AVIStreamGetFrameClose@4,该符号在函数 "public: virtual void __thiscall CvCaptureAVI_VFW::close(void)" (?close@CvCaptureAVI_VFW@@UAEXXZ) 中被引用
1>opencv_highgui2413d.lib(cap_vfw.obj) : error LNK2019: 无法解析的外部符号 _AVIMakeCompressedStream@16,该符号在函数 "protected: bool __thiscall CvVideoWriter_VFW::createStreams(struct CvSize,bool)" (?createStreams@CvVideoWriter_VFW@@IAE_NUCvSize@@_N@Z) 中被引用
1>opencv_highgui2413d.lib(cap_vfw.obj) : error LNK2019: 无法解析的外部符号 _AVISaveOptions@20,该符号在函数 "protected: bool __thiscall CvVideoWriter_VFW::createStreams(struct CvSize,bool)" (?createStreams@CvVideoWriter_VFW@@IAE_NUCvSize@@_N@Z) 中被引用
1>opencv_highgui2413d.lib(cap_vfw.obj) : error LNK2019: 无法解析的外部符号 _capCreateCaptureWindowA@32,该符号在函数 "public: virtual bool __thiscall CvCaptureCAM_VFW::open(int)" (?open@CvCaptureCAM_VFW@@UAE_NH@Z) 中被引用
1>opencv_highgui2413d.lib(cap_vfw.obj) : error LNK2019: 无法解析的外部符号 _capGetDriverDescriptionA@20,该符号在函数 "public: virtual bool __thiscall CvCaptureCAM_VFW::open(int)" (?open@CvCaptureCAM_VFW@@UAE_NH@Z) 中被引用

...全文
2731 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
我是T先森 2019-06-26
  • 打赏
  • 举报
回复
您好,我也是在编译的时候出现以下问题,方便指教一下吗,谢谢~ 错误 1 error LNK2019: 无法解析的外部符号 __imp__oniInitialize,该符号在函数 "public: static enum openni::Status __cdecl openni::OpenNI::initialize(void)" (?initialize@OpenNI@openni@@SA?AW4Status@2@XZ) 中被引用 D:\Users\Chong\documents\visual studio 2013\Projects\Kinect 1.0\Kinect 1.0\源.obj Kinect 1.0 错误 2 error LNK2019: 无法解析的外部符号 __imp__oniShutdown,该符号在函数 "public: static void __cdecl openni::OpenNI::shutdown(void)" (?shutdown@OpenNI@openni@@SAXXZ) 中被引用 D:\Users\Chong\documents\visual studio 2013\Projects\Kinect 1.0\Kinect 1.0\源.obj Kinect 1.0 错误 3 error LNK2019: 无法解析的外部符号 __imp__oniDeviceOpen,该符号在函数 "public: enum openni::Status __thiscall openni::Device::open(char const *)" (?open@Device@openni@@QAE?AW4Status@2@PBD@Z) 中被引用 D:\Users\Chong\documents\visual studio 2013\Projects\Kinect 1.0\Kinect 1.0\源.obj Kinect 1.0 错误 4 error LNK2019: 无法解析的外部符号 __imp__oniDeviceClose,该符号在函数 "public: void __thiscall openni::Device::close(void)" (?close@Device@openni@@QAEXXZ) 中被引用 D:\Users\Chong\documents\visual studio 2013\Projects\Kinect 1.0\Kinect 1.0\源.obj Kinect 1.0 错误 5 error LNK2019: 无法解析的外部符号 __imp__oniDeviceGetInfo,该符号在函数 "private: enum openni::Status __thiscall openni::Device::_setHandle(struct _OniDevice *)" (?_setHandle@Device@openni@@AAE?AW4Status@2@PAU_OniDevice@@@Z) 中被引用 D:\Users\Chong\documents\visual studio 2013\Projects\Kinect 1.0\Kinect 1.0\源.obj Kinect 1.0 错误 6 error LNK2019: 无法解析的外部符号 __imp__oniDeviceCreateStream,该符号在函数 "public: enum openni::Status __thiscall openni::VideoStream::create(class openni::Device const &,enum openni::SensorType)" (?create@VideoStream@openni@@QAE?AW4Status@2@ABVDevice@2@W4SensorType@2@@Z) 中被引用 D:\Users\Chong\documents\visual studio 2013\Projects\Kinect 1.0\Kinect 1.0\源.obj Kinect 1.0 错误 7 error LNK2019: 无法解析的外部符号 __imp__oniDeviceSetProperty,该符号在函数 "public: enum openni::Status __thiscall openni::Device::setProperty(int,void const *,int)" (?setProperty@Device@openni@@QAE?AW4Status@2@HPBXH@Z) 中被引用 D:\Users\Chong\documents\visual studio 2013\Projects\Kinect 1.0\Kinect 1.0\源.obj Kinect 1.0 错误 8 error LNK2019: 无法解析的外部符号 __imp__oniDeviceIsPropertySupported,该符号在函数 "public: bool __thiscall openni::Device::isPropertySupported(int)const " (?isPropertySupported@Device@openni@@QBE_NH@Z) 中被引用 D:\Users\Chong\documents\visual studio 2013\Projects\Kinect 1.0\Kinect 1.0\源.obj Kinect 1.0 错误 9 error LNK2019: 无法解析的外部符号 __imp__oniDeviceIsCommandSupported,该符号在函数 "public: bool __thiscall openni::Device::isCommandSupported(int)const " (?isCommandSupported@Device@openni@@QBE_NH@Z) 中被引用 D:\Users\Chong\documents\visual studio 2013\Projects\Kinect 1.0\Kinect 1.0\源.obj Kinect 1.0 错误 10 error LNK2019: 无法解析的外部符号 __imp__oniStreamDestroy,该符号在函数 "public: void __thiscall openni::VideoStream::destroy(void)" (?destroy@VideoStream@openni@@QAEXXZ) 中被引用 D:\Users\Chong\documents\visual studio 2013\Projects\Kinect 1.0\Kinect 1.0\源.obj Kinect 1.0 错误 11 error LNK2019: 无法解析的外部符号 __imp__oniStreamGetSensorInfo,该符号在函数 "private: void __thiscall openni::VideoStream::_setHandle(struct _OniStream *)" (?_setHandle@VideoStream@openni@@AAEXPAU_OniStream@@@Z) 中被引用 D:\Users\Chong\documents\visual studio 2013\Projects\Kinect 1.0\Kinect 1.0\源.obj Kinect 1.0 错误 12 error LNK2019: 无法解析的外部符号 __imp__oniStreamStart,该符号在函数 "public: enum openni::Status __thiscall openni::VideoStream::start(void)" (?start@VideoStream@openni@@QAE?AW4Status@2@XZ) 中被引用 D:\Users\Chong\documents\visual studio 2013\Projects\Kinect 1.0\Kinect 1.0\源.obj Kinect 1.0 错误 13 error LNK2019: 无法解析的外部符号 __imp__oniStreamReadFrame,该符号在函数 "public: enum openni::Status __thiscall openni::VideoStream::readFrame(class openni::VideoFrameRef *)" (?readFrame@VideoStream@openni@@QAE?AW4Status@2@PAVVideoFrameRef@2@@Z) 中被引用 D:\Users\Chong\documents\visual studio 2013\Projects\Kinect 1.0\Kinect 1.0\源.obj Kinect 1.0 错误 14 error LNK2019: 无法解析的外部符号 __imp__oniStreamSetProperty,该符号在函数 "public: enum openni::Status __thiscall openni::VideoStream::setProperty(int,void const *,int)" (?setProperty@VideoStream@openni@@QAE?AW4Status@2@HPBXH@Z) 中被引用 D:\Users\Chong\documents\visual studio 2013\Projects\Kinect 1.0\Kinect 1.0\源.obj Kinect 1.0 错误 15 error LNK2019: 无法解析的外部符号 __imp__oniStreamGetProperty,该符号在函数 "public: enum openni::Status __thiscall openni::VideoStream::getProperty(int,void *,int *)const " (?getProperty@VideoStream@openni@@QBE?AW4Status@2@HPAXPAH@Z) 中被引用 D:\Users\Chong\documents\visual studio 2013\Projects\Kinect 1.0\Kinect 1.0\源.obj Kinect 1.0 错误 16 error LNK2019: 无法解析的外部符号 __imp__oniStreamIsPropertySupported,该符号在函数 "public: bool __thiscall openni::VideoStream::isPropertySupported(int)const " (?isPropertySupported@VideoStream@openni@@QBE_NH@Z) 中被引用 D:\Users\Chong\documents\visual studio 2013\Projects\Kinect 1.0\Kinect 1.0\源.obj Kinect 1.0 错误 17 error LNK2019: 无法解析的外部符号 __imp__oniFrameRelease,该符号在函数 "public: void __thiscall openni::VideoFrameRef::release(void)" (?release@VideoFrameRef@openni@@QAEXXZ) 中被引用 D:\Users\Chong\documents\visual studio 2013\Projects\Kinect 1.0\Kinect 1.0\源.obj Kinect 1.0 错误 18 error LNK1120: 17 个无法解析的外部命令 D:\Users\Chong\documents\visual studio 2013\Projects\Kinect 1.0\Debug\Kinect 1.0.exe Kinect 1.0
  • 打赏
  • 举报
回复
引用 8 楼 黑空红叶 的回复:
#pragma comment(lib, "vfw32")

此乃正解
林多 2018-10-12
  • 打赏
  • 举报
回复
引用 6 楼 fwj961012 的回复:
[quote=引用 5 楼 zhao4zhong1 的回复:]
试试全部改为使用动态库。


解决了, 谢谢老师
可是为什么静态库内没有声明VideoCapture呢? 如果要使可执行文件能在别人电脑内直接用是不是需要把相关库也复制到相同目录下?[/quote]

你的静态库没有引全。所以link是找不到对应函数的入口地址。你可以在配置列表里,加一下,试试看。
vfw32.lib
如果还不好使,可以继续加一下。
comctl32.lib
gdi32.lib。


想在别人电脑里运行可执行程序(运行时加载动态库)。需要那个人的电脑,支持OpenCV的运行环境。。所以,和你说的差不多吧。。。就像,玩某些游戏,需要下载某些运行库一样。。
黑空红叶 2018-10-11
  • 打赏
  • 举报
回复
#pragma comment(lib, "vfw32")
V+ 2017-08-16
  • 打赏
  • 举报
回复
引用 5 楼 zhao4zhong1 的回复:
试试全部改为使用动态库。
解决了, 谢谢老师 可是为什么静态库内没有声明VideoCapture呢? 如果要使可执行文件能在别人电脑内直接用是不是需要把相关库也复制到相同目录下?
赵4老师 2017-08-16
  • 打赏
  • 举报
回复
试试全部改为使用动态库。
V+ 2017-08-16
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
将所有Opecv*.dll拷贝一份放在你exe文件所在文件夹下。
我已经按照官方操作添加了下列附加依赖项: opencv_calib3d2413d.lib opencv_contrib2413d.lib opencv_core2413d.lib opencv_features2d2413d.lib opencv_flann2413d.lib opencv_gpu2413d.lib opencv_highgui2413d.lib opencv_imgproc2413d.lib opencv_legacy2413d.lib opencv_ml2413d.lib opencv_nonfree2413d.lib opencv_objdetect2413d.lib opencv_ocl2413d.lib opencv_photo2413d.lib opencv_stitching2413d.lib opencv_superres2413d.lib opencv_ts2413d.lib opencv_video2413d.lib opencv_videostab2413d.lib IlmImfd.lib libjasperd.lib libjpegd.lib libpngd.lib libtiffd.lib zlibd.lib 可是依然像前面一样报错,就像opencv_highgui2413d.lib没有相关声明似的. 老师您说拷贝lib到目录下, 这个和添加附加依赖项难道不是一个作用的操作吗? 我照着做了依然报错啊.
赵4老师 2017-08-16
  • 打赏
  • 举报
回复
将OpenCV*.lib文件所在文件夹添加到 项目、属性、链接器、常规、附加库目录:填写附加依赖库所在目录 分号间隔多项 将所有OpenCV*.lib文件添加到 项目、属性、链接器、输入、附加依赖项:填写附加依赖库的名字.lib 空格或分号间隔多项
赵4老师 2017-08-16
  • 打赏
  • 举报
回复
将所有Opecv*.dll拷贝一份放在你exe文件所在文件夹下。
kuangbao9 2017-08-16
  • 打赏
  • 举报
回复
相关类库没有包含进来吧
赵4老师 2017-08-16
  • 打赏
  • 举报
回复
只要记住以后别使用静态库就够了。

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧