总而言之,我尝试将opencv测试程序与我使用64位visual Studio2010专业版编译的opencv库链接起来。一个示例错误是:
1>webcamtest.obj : error LNK2001: unresolved external symbol "public: virtual bool __thiscall cv::VideoCapture::isOpened(void)const " (?isOpened@VideoCapture@cv@@UBE_NXZ)问题是,当它所链接的opencv_highui249.dll包含__thiscall时,为什么使用它
Symbol name : ?isOpened@VideoWriter@cv@@UEBA_NXZ (public: virtual bool __cdecl cv::VideoWriter::isOpened(void)const )__cdecl是有意义的,这表明库是正确构建的。当链接测试程序时,正在搜索opencv_highui249.dll,所以构建标志看起来是正确的,但显然我遗漏了什么?
发布于 2012-08-13 22:32:01
您确定您使用的是x64库吗?
微软减少了x64中的调用约定。参见here。基本上,现在一切都是__fastcall。
编译器仍然可以使用__thiscall,但它被忽略(MSDN link)。所以你的测试程序是好的,但是你的库看起来是错误的。
发布于 2012-08-13 22:19:02
__thiscall是VS中类的成员函数的默认调用约定。可能头文件缺少__cdecl说明符,或者编译标志设置不正确,因此没有为其设置相关的#define。
发布于 2012-08-13 22:19:38
__thiscall是MSVC中类成员函数的默认值,您需要使用相同的设置编译OpenCV,或者在标头定义中显式使用__cdecl。
https://stackoverflow.com/questions/11935813
复制相似问题