【发布时间】:2020-06-15 18:34:34
【问题描述】:
工具
- 平台:64 位 Windows
- 编译器链:mingw 与 Qt
- 制作系统:CMake
- 库:C++ 11、OpenCV 4、Qt 5
问题(更新)
下面的简单程序段应该编译并在 OpenCV 中显示生成的图像。但是,它始终只在调试模式下使用 SIGSEGV(最后是回溯)。但是,它在 RELEASE 模式下工作得很好。
#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
void testOPENCV()
{
cv::Mat output(480, 640, CV_8UC3, cv::Scalar(255,0,100));
cv::namedWindow( "Test", cv::WINDOW_AUTOSIZE );
cv::imshow("Test",output);
cv::waitKey(0);
}
int main(int argc, char** argv)
{
testOPENCV();
return 0;
}
我有一个 CMake 脚本,它只构建所需的 OpenCV 模块并将这些模块链接到依赖项。相关部分:
build_external_project(opencv "https://github.com/opencv/opencv.git" "4.2.0" "-DCMAKE_INSTALL_PREFIX=${THIRDPARTY_INSTALLFOLDER} - DCMAKE_BUILD_TYPE=${THIRDPARTY_BUILDTYPE} -DBUILD_LIST=core,imgproc,imgcodecs,highgui")
target_link_libraries(OpenVideo ${OpenCV_LIBS})
二进制文件可以在没有丢失 dll 错误的情况下运行。 Dependency walker 也表示相同。
这是回溯:
【问题讨论】:
-
“这个简单的程序段应该编译”,不,不应该。我没有看到
main()。我没有看到适当的头文件得到#included。仅仅因为您的程序在此处因回溯而崩溃并不意味着这就是问题所在。 C++ 不能以这种方式工作。该错误可能在您的代码中的任何位置。这就是为什么 stackoverflow.com 的 help center 会为您提供创建 minimal reproducible example 的说明,以便任何人都可以完全如图所示剪切/粘贴代码、编译、运行和重现您的问题。您没有遵循这些说明,因此不太可能有人可以帮助您。 -
发布您的 .pro 文件也会很有帮助
-
您是否在运行代码之前在行中插入断点?
-
@ManjunathReddy 我在 Visual Studio,opencv 3.4.5 中测试了这段代码,在调试和发布中没有问题。检查你的 opencv 安装是否有调试模式。那里可能有错误
标签: c++ windows opencv cmake mingw