2012-03-22 41 views
0

随时我致电cvNamedWindow我得到一个分段错误,我不知道它为什么会发生。我已经尝试编写在线代码示例以及编写我自己的代码示例。这里有一个最小的一段代码,重新产生此问题:cvNamedWindow always segfaults

#include <opencv2/opencv.hpp> 

int main() { 
    cvNamedWindow("Video"); 
    return 0; 
} 

cv::namedWindow("Video")也不起作用。为什么会发生?我正在使用QG Creator在MinGW(C++编译器v4.6.1)下编译OpenCV 2.3.1。

+0

如果我没有弄错,cv :: namedWindow是在highgui头文件中,但不应该出现在你的段错误中。我能想到的唯一原因就是你以某种方式链接到错误版本的opencv ... – etarion 2012-03-22 14:13:41

+0

此问题已解决此问题: http://stackoverflow.com/questions/4609069/opencv-2 -2-windows-xp-mingw-build-crashes-on-namedwindow -imshow – webmaster 2012-04-14 07:29:18

回答

1

我假设问题与我发布的another thread有关。长话短说,我的另一个问题与我不知道的调试和发布DLL之间的差异有关。

1

我测试你的代码,并没有能够重现该问题上:

  • 的LinuxGCC 4.5.1 20100924(红帽4.5.1-4)
  • 的Windows XPVS2010

然而,这是很好的做法,呼吁cvDestroyWindow()释放创建窗口时分配的资源:

#include <opencv2/opencv.hpp> 

int main() 
{ 
    cvNamedWindow("Video"); 

    cvDestroyWindow("Video"); 

    return 0; 
} 

在Windows上我用OpenCV-2.3.0-win-superpack.exe。这是一个在Visual Studio 2010上的guide for installing

+0

你说得对,我也应该调用'cvDestroyWindow'。但是我使用调试器进行了检查,程序在'cvNamedWindow'期间被隔离了,而不是之后。因此,在退出之前销毁窗口并不能解决问题。 – Pieter 2012-03-22 13:57:12

+0

我不知道该告诉你什么。这不会发生在Linux上。我将用MingW重新编译OpenCV,并确保所有编译成功。我假设你使用的是最新版本的OpenCV!你允许使用其他编译器,如[VS2010](http://stackoverflow.com/a/7014918/176769)? – karlphillip 2012-03-22 14:04:19

+0

已更新的答案。 – karlphillip 2012-03-22 14:06:37

0

可能与您的问题的原因没有直接关系,但对我来说,分段错误的原因是由于多线程(并行处理)。