2

总的来说,我正在尝试将 opencv 测试程序与我使用 64 位 Visual Studio 2010 Professional 编译的 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,因此构建标志似乎是正确的,但显然我遗漏了什么?

4

3 回答 3

1

你确定你使用的是 x64 库吗?
Microsoft 减少了 x64 中的调用约定。见这里。基本上一切都是现在__fastcall
编译器仍然可以使用__thiscall,但它被忽略(MSDN 链接)。所以你的测试程序很好,但你的库看起来不对。

于 2012-08-13T14:32:01.303 回答
0

__thiscall是 VS 中类成员函数的默认调用约定。也许头文件缺少说明__cdecl符,或者编译标志设置不正确,因此没有设置相关的#define。

于 2012-08-13T14:19:02.147 回答
0

__thiscall是 MSVC 中类成员函数的默认值,您需要使用相同的设置编译 OpenCV,或者__cdecl在标头定义中显式使用。

于 2012-08-13T14:19:38.207 回答