C++ 为什么VisualStudio2010寻找的是_uThisCall而不是_uCDECL调用约定?

C++ 为什么VisualStudio2010寻找的是_uThisCall而不是_uCDECL调用约定?,c++,visual-studio-2010,opencv,linker,calling-convention,C++,Visual Studio 2010,Opencv,Linker,Calling Convention,总的来说,我正在尝试将opencv测试程序与我使用64位VisualStudio2010 professional编译的opencv库链接起来。一个示例错误是: 1>webcamtest.obj : error LNK2001: unresolved external symbol "public: virtual bool __thiscall cv::VideoCapture::isOpened(void)const " (?isOpened@VideoCapture@cv@@UBE_

总的来说,我正在尝试将opencv测试程序与我使用64位VisualStudio2010 professional编译的opencv库链接起来。一个示例错误是:

1>webcamtest.obj : error LNK2001: unresolved external symbol "public: virtual bool __thiscall cv::VideoCapture::isOpened(void)const " (?isOpened@VideoCapture@cv@@UBE_NXZ)
问题是,当链接到的opencv\u highui249.dll包含

Symbol name  : ?isOpened@VideoWriter@cv@@UEBA_NXZ (public: virtual bool __cdecl cv::VideoWriter::isOpened(void)const )
__cdecl是有意义的,这表明库的构建是正确的。
链接测试程序时,正在搜索opencv_highui249.dll,因此构建标志看起来是正确的,但显然我遗漏了什么?

\u此调用是VS中类的成员函数的默认调用约定。可能头文件缺少
\uuuu cdecl
说明符,或者编译标志设置不正确,因此没有为其设置相关的定义。

\uuu thiscall
是MSVC中类成员函数的默认值,您需要使用相同的设置编译OpenCV,或者在标题定义中明确使用
\uu cdecl

您确定使用了x64库吗?
Microsoft减少了x64中的呼叫约定。看见基本上现在一切都是
\uu快速呼叫

编译器仍然可以使用
\u thiscall
,但它被忽略()。因此,您的测试程序很好,但您的库看起来是错误的