首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么visual studio 2010寻找的是__thiscall而不是__cdecl调用约定?

为什么visual studio 2010寻找的是__thiscall而不是__cdecl调用约定?
EN

Stack Overflow用户
提问于 2012-08-13 21:57:57
回答 3查看 1.5K关注 0票数 2

总而言之,我尝试将opencv测试程序与我使用64位visual Studio2010专业版编译的opencv库链接起来。一个示例错误是:

代码语言:javascript
复制
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时,为什么使用它

代码语言:javascript
复制
Symbol name  : ?isOpened@VideoWriter@cv@@UEBA_NXZ (public: virtual bool __cdecl cv::VideoWriter::isOpened(void)const )

__cdecl是有意义的,这表明库是正确构建的。当链接测试程序时,正在搜索opencv_highui249.dll,所以构建标志看起来是正确的,但显然我遗漏了什么?

EN

回答 3

Stack Overflow用户

发布于 2012-08-13 22:32:01

您确定您使用的是x64库吗?

微软减少了x64中的调用约定。参见here。基本上,现在一切都是__fastcall

编译器仍然可以使用__thiscall,但它被忽略(MSDN link)。所以你的测试程序是好的,但是你的库看起来是错误的。

票数 1
EN

Stack Overflow用户

发布于 2012-08-13 22:19:02

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

票数 0
EN

Stack Overflow用户

发布于 2012-08-13 22:19:38

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11935813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档