OpenCV 2.4.3使用静态库出现LNK2019错误

7

我正在尝试在64位vs10控制台应用程序中使用openCV243静态库。我的操作系统是win7 64位。

我已经包含了以下库:

#pragma comment(lib,"../final_test/libs/staticlib/opencv_core243.lib")
#pragma comment(lib,"../final_test/libs/staticlib/opencv_highgui243.lib")
#pragma comment(lib,"../final_test/libs/staticlib/opencv_imgproc243.lib")       
#pragma comment(lib,"../final_test/libs/staticlib/opencv_video243d.lib")        
#pragma comment(lib,"../final_test/libs/staticlib/opencv_flann243.lib")
#pragma comment(lib,"../final_test/libs/staticlib/opencv_features2d243.lib")
#pragma comment(lib,"../final_test/libs/staticlib/opencv_objdetect243.lib")
#pragma comment(lib,"../final_test/libs/staticlib/opencv_core243.lib")
#pragma comment(lib,"../final_test/libs/staticlib/opencv_calib3d243.lib")       
#pragma comment(lib,"../final_test/libs/staticlib/opencv_legacy243.lib")
#pragma comment(lib,"../final_test/libs/staticlib/opencv_features2d243.lib")
#pragma comment(lib,"../final_test/libs/staticlib/opencv_ml243.lib")
#pragma comment(lib,"../final_test/libs/staticlib/libjpeg.lib")
#pragma comment(lib,"../final_test/libs/staticlib/libpng.lib")
#pragma comment(lib,"../final_test/libs/staticlib/libtiff.lib")
#pragma comment(lib,"../final_test/libs/staticlib/libjasper.lib")
#pragma comment(lib,"../final_test/libs/staticlib/zlib.lib")
#pragma comment(lib,"../final_test/libs/staticlib/IlmImf.lib")
#pragma comment(lib,"../final_test/libs/staticlib/opencv_videostab243") 
#pragma comment(lib,"../final_test/libs/staticlib/opencv_contrib243.lib")
#pragma comment(lib,"../final_test/libs/staticlib/opencv_nonfree243.lib")
#pragma comment(lib,"../final_test/libs/staticlib/opencv_photo243.lib")
#pragma comment(lib,"../final_test/libs/staticlib/opencv_stitching243.lib")
#pragma comment(lib,"../final_test/libs/staticlib/IlmImf.lib")
#pragma comment(lib,"../final_test/libs/staticlib/opencv_ts243.lib")

运行时库是:多线程(/MT)
我遇到了以下链接错误。
1>opencv_highgui243.lib(cap_vfw.obj) : error LNK2019: unresolved external symbol AVIFileInit referenced in function "void __cdecl icvInitCapture_VFW(void)" (?icvInitCapture_VFW@@YAXXZ)
1>opencv_highgui243.lib(cap_vfw.obj) : error LNK2019: unresolved external symbol AVIStreamGetFrameOpen referenced in function "public: virtual bool __cdecl CvCaptureAVI_VFW::open(char const *)" (?open@CvCaptureAVI_VFW@@UEAA_NPEBD@Z)
1>opencv_highgui243.lib(cap_vfw.obj) : error LNK2019: unresolved external symbol AVIStreamInfoA referenced in function "public: virtual bool __cdecl CvCaptureAVI_VFW::open(char const *)" (?open@CvCaptureAVI_VFW@@UEAA_NPEBD@Z)
1>opencv_highgui243.lib(cap_vfw.obj) : error LNK2019: unresolved external symbol AVIFileGetStream referenced in function "public: virtual bool __cdecl CvCaptureAVI_VFW::open(char const *)" (?open@CvCaptureAVI_VFW@@UEAA_NPEBD@Z)
1>opencv_highgui243.lib(cap_vfw.obj) : error LNK2019: unresolved external symbol AVIFileOpenA referenced in function "public: virtual bool __cdecl CvCaptureAVI_VFW::open(char const *)" (?open@CvCaptureAVI_VFW@@UEAA_NPEBD@Z)
1>opencv_highgui243.lib(cap_vfw.obj) : error LNK2019: unresolved external symbol AVIStreamGetFrame referenced in function "public: virtual bool __cdecl CvCaptureAVI_VFW::grabFrame(void)" (?grabFrame@CvCaptureAVI_VFW@@UEAA_NXZ)
1>opencv_highgui243.lib(cap_vfw.obj) : error LNK2019: unresolved external symbol ICClose referenced in function "protected: void __cdecl CvCaptureCAM_VFW::closeHIC(void)" (?closeHIC@CvCaptureCAM_VFW@@IEAAXXZ)
1>opencv_highgui243.lib(cap_vfw.obj) : error LNK2019: unresolved external symbol ICSendMessage referenced in function "protected: void __cdecl CvCaptureCAM_VFW::closeHIC(void)" (?closeHIC@CvCaptureCAM_VFW@@IEAAXXZ)

有谁可以帮我解决这个问题吗?谢谢。


不包含“highgui”库时,它是否可以编译? - Niko
这可能也有帮助:https://dev59.com/d3RA5IYBdhLWcg3wuAcp - Niko
感谢您的评论。 不幸的是,没有高级图形用户界面,该项目无法编译。 - user1043413
好的,你是否在项目配置中指定了这些库文件作为附加依赖项?这可能是必要的。 - Niko
2个回答

14

你需要链接MS vfw32.lib库。


2
还需要comctl32.lib。 - Nima
@ChaiNadig 要么像furqan的答案那样添加编译指示,要么在VC++ 2010 Express中:项目属性(Alt-F7)-> 配置属性-> 链接器-> 输入; 单击“附加依赖项”值上的下拉菜单,<编辑...>,在上面粘贴库文件列表。您将在单独的行上拥有vfw32.lib和comctl32.lib,以及来自%OPENCV_DIR%\build\x86\vc10\staticlib的库。 - sastanin

5

只需在您的头文件中执行此操作。它应该完美地工作。

#include "opencv2/opencv.hpp"
#pragma comment(lib, "vfw32.lib")
#pragma comment( lib, "comctl32.lib" )

那么我应该链接哪个版本呢?没有64位版本吗?或者这些文件在我的system32文件夹中自动变成了64位?我正在运行64位的Windows 7。我的问题是,由于我编译了64位,cv:VideoCapture::readMat(CV_OUT Mat& image)返回一个空的cv::Mat - tzippy
你应该在cmake文件或类似的文件中定义你的依赖关系。链接编译指示是一个不好的概念。为什么我要在编译时定义链接时间依赖关系?它们还是特定于编译器而且不可移植的。当然,这些库的名称中包含32是因为它们是win32名称的一部分,而不是因为它们一定是32位库。附:我遇到了相同的缺失符号问题,在我的情况下,我将两个win32库添加到我的conan opencv软件包的库列表中以进行链接。 - MichaelE1000

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接