总的来说,我试图将opencv测试程序与我使用64位visual studio 2010专业版编译的opencv库链接起来。示例错误是:
1>webcamtest.obj : error LNK2001: unresolved external symbol "public: virtual bool __thiscall cv::VideoCapture::isOpened(void)const " (?isOpened@VideoCapture@cv@@UBE_NXZ)
问题是为什么__thiscall,当它与之链接的opencv_highui249.dll包含
Symbol name : ?isOpened@VideoWriter@cv@@UEBA_NXZ (public: virtual bool __cdecl cv::VideoWriter::isOpened(void)const )
__ cdecl有意义,这表明该库是正确构建的。 在链接测试程序时,正在搜索opencv_highui249.dll,因此构建标志看起来是正确的,但显然我遗漏了什么?
答案 0 :(得分:1)
您确定使用过x64库吗?
Microsoft减少了x64中的调用约定。见here。基本上现在一切都是__fastcall
编译器仍然可以使用__thiscall
,但会被忽略(MSDN link)。所以你的测试程序很好,但你的库看起来不对。
答案 1 :(得分:0)
__thiscall
是VS中类的成员函数的默认调用约定。也许头文件缺少__cdecl
说明符,或者编译标志设置不正确,因此没有设置相关的#define。
答案 2 :(得分:0)
__thiscall
是MSVC中类成员函数的默认值,您需要使用相同的设置编译OpenCV,或者在标头定义中明确使用__cdecl
。