OpenCV 2.3,Qt 4.3.7

时间:2011-08-02 12:45:48

标签: c++ visual-studio-2010 qt interface opencv

我已经成功构建并运行Qt 4.3.7和OpenCV 2.3并启用了Qt。当我使用以下命令启动窗口时:

cvNamedWindow( "video", 0 );

我成功加载了一个完整的Qt界面!精彩:))

然而!!当我使用命令

void callbackButton(int state, void* userdata){
int x;
x=3;
}

cvCreateButton(nameb2,callbackButton,nameb2,CV_CHECKBOX,0);

我收到错误消息

error LNK2001: unresolved external symbol _cvCreateButton

我不明白Qt界面上有很多按钮吗?有人可以解释一下我所遗漏的内容可能会导致这种情况吗?

谢谢!

4 个答案:

答案 0 :(得分:0)

这是一个链接错误。 尝试将opencv .lib文件(或文件)添加到项目库路径中。 这可能有所帮助:VS2010 OpenCV

修改

精炼问题:即使在项目中添加任何 OpenCV 库,链接也会失败。

原因:图标中通常没有符号。

解决方案:您必须更改一些设置并自行编译。

另请参阅:openCV 2.2 createButton LNK 2019 error in Visual Studio 2010

答案 1 :(得分:0)

您使用错误的参数来调用cvCreateButton。根据文档here,函数的签名是

cvCreateButton(const char* button_name CV_DEFAULT(NULL), CvButtonCallback on_change CV_DEFAULT(NULL), void* userdata CV_DEFAULT(NULL), int button_type CV_DEFAULT(CV_PUSH_BUTTON), int initial_button_state CV_DEFAULT(0)

和示例调用是:

cvCreateButton(NULL,callbackButton);
cvCreateButton("button2",callbackButton,NULL,CV_CHECKBOX,0);
cvCreateButton("button3",callbackButton,&value);
cvCreateButton("button5",callbackButton1,NULL,CV_RADIOBOX);
cvCreateButton("button6",callbackButton2,NULL,CV_PUSH_BUTTON,1);

并且回调函数的声明必须是:

CV_EXTERN_C_FUNCPTR( *CvButtonCallback)(int state, void* userdata));

您收到链接错误而不是编译器错误,因为cvCreateButton具有extern“C”链接 - 这意味着在编译时无法检查参数。

答案 2 :(得分:0)

第三个参数必须是void*。改为:

cvCreateButton(nameb2,callbackButton,NULL,CV_CHECKBOX,0);

它会起作用。

修改

上述声明给出了错误。 第三个需要的参数是“void *” - 这与任何东西兼容,因此C和C ++都不应该对你提供的内容有任何问题。你不能用它来引发链接器错误。

通过编码引发链接器错误的唯一原因是当你不在C ++中使用原型(忘记使用头文件),然后C ++自己创建一个不受任何库的一部分的错位名称。在这种情况下,编译器将首先在编译时告诉您缺少原型(对于C和C ++) - 然后链接器可能会引发错误(仅适用于c ++)。

如果您没有看到编译器的原型警告,那么这不是您的问题。

答案 3 :(得分:0)

我通过调用函数cv :: createButton而不是cvCreateButton解决了这个问题(如果我在OpenCV2中调用方法的方法是正确的。)