【问题标题】:cvNamedWindow always segfaultscvNamedWindow 总是段错误
【发布时间】:2012-03-22 13:21:55
【问题描述】:

任何时候我打电话给cvNamedWindow 我都会遇到分段错误,我不知道为什么会发生。我尝试过编译在线代码示例以及编写自己的代码示例。这是重现问题的最小代码:

#include <opencv2/opencv.hpp>

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

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

【问题讨论】:

  • 如果我没记错的话, cv::namedWindow 在 highgui 标头中,但是您的段错误不应该是这种情况。我能想到的唯一原因是您以某种方式链接到错误版本的 opencv ...
  • 这个问题已经在这个帖子里解决了:stackoverflow.com/questions/4609069/…

标签: c++ c opencv mingw


【解决方案1】:

我测试了您的代码,但无法在以下位置重现问题:

  • LinuxGCC 4.5.1 20100924 (Red Hat 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

【讨论】:

  • 你说得对,我也应该打电话给cvDestroyWindow。但我检查了调试器,程序在cvNamedWindow 期间出现了段错误,而不是之后。所以在退出前销毁窗口并不能解决问题。
  • 我不知道该告诉你什么。无论哪种方式,它都不会在 Linux 上发生。我会用 MingW 重新编译 OpenCV 并确保一切编译成功。我假设您使用的是最新版本的 OpenCV!您是否允许使用其他编译器,例如VS2010
  • 这并没有什么不同。毕竟,这是一个默认参数。到目前为止,没有迹象表明编译器有问题!
  • 更新了答案。 VS2010 上不会出现问题。
  • 有趣的是你提到了这一点。看了你的评论,我搭建了一个VS2010的编译环境,代码运行流畅。然后我切换回MinGW,它也运行顺利!我不知道发生了什么,但它似乎已修复。我猜,一定是我的构建环境中的某些东西。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2023-03-26
      • 1970-01-01
      • 2018-04-10
      • 2020-01-07
      • 2010-10-24
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多