2013-10-09 43 views
2

我最近开始使用OpenCV并配置OpenCV和MingW。我正在使用Windows 7操作系统。我没有为我的程序使用任何IDE。但我仍然对现在正在执行的程序感到满意。打开CV,C++:“错误:应用程序无法正确启动(0x0000005)。”

我写我的第一个程序,它编译成功,但是当我跑的.exe文件时,它给了一个应用程序错误为: The application was unable to start correctly (0x0000005). Click OK to close the application.

以下是我写的代码:

#include "cstdlib" 
#include "iostream" 
#include "opencv2/highgui/highgui.hpp" 

using namespace std; 

using namespace cv; 

int main() 
{ 

    Mat img = imread("v.jpg", CV_LOAD_IMAGE_COLOR); 
    if (img.empty()) 
    { 
     cout << "Error: Image cannot be loaded...!!" << endl; 
     system("pause"); //wait for a key press 
     return -1; 
    } 
    namedWindow("MyWindow", CV_WINDOW_AUTOSIZE); 
    imshow("MyWindow", img); 
    waitKey(0); 
    destroyWindow("MyWindow"); 

    return 0; 
} 

而对于执行,我写了一个批处理文件,如下所示,并执行它::

g++ -I"D:\opencv\opencv\build\include" -L"D:\opencv\opencv\build\x86\mingw\lib" ImageTest1.cpp -lopencv_core246 -lopencv_highgui246 -o ImageTest1.exe 
ImageTest1.exe 
pause 

我也甲肝e将以下内容添加到系统路径中::

D:\MingW\bin;;D:\MingW\msys\1.0\bin;;D:\OpenCV\opencv\build\x64\mingw\bin;; 

我试着将x64更改为x86。但那并不奏效。

编辑:我执行.exe为admin和它说The application was unable to start correctly (0xc000007b). Click OK to close the application

+0

难道你不需要先调用某种init函数吗? – pts

+0

编译步骤的输出(对'g ++'的调用)是什么? – zakinster

回答

0

<>括号将系统置于进口。这是用于<cstdio><iostream>

编辑:我误读错误代码。请忽略我的答案的其余部分。

看来,Windows无法在启动时找到库。

我的假设是基于 0x7B错误。

+0

您在段落1中说的内容可能属实,但包含文件在编译时处理,而不是在加载时处理。为什么'STATUS_INVALID_IMAGE_FORMAT == 0xc000007b'备份你说的话? –

+0

噢......我错过了开始时的“c”......我认为错误是'0x0000007b == ERROR_INVALID_NAME' – jnovacho

4

我不相信你已经准确地报告了错误代码。我不相信错误代码只包含7个十六进制数字。它包含8.我相信你已经错过了第一个数字,我打赌是c。在这种情况下,错误消息,真的是:

 
The application was unable to start correctly (0xc0000005). 

现在,该代码是NT状态代码STATUS_ACCESS_VIOLATION。当系统告诉你应用程序无法启动时这意味着错误发生在加载程序的代码中。换句话说,你的代码甚至还没有开始运行。该错误将发生在您的某个依赖DLL的DllMain函数中。

最有可能是加载不同的DLL之间有一些不兼容。为了进一步调试,您可能需要调试加载过程。首先在配置文件模式下运行Dependency Walker,找出哪个模块的DllMain正在引发异常。希望Dependency Walker能够指向你的依赖库中存在的不匹配。

+0

我的操作系统是Windows 7 64位。但我链接的DLL是32位的。当我尝试使用64位DLL时,出现错误,说'未定义参考' –

+0

首先,您可以确认错误代码是我相信的。然后编辑问题。记录你的操作系统是无关紧要的。如果进程是32位,则使用32位DLL。如果进程是64位,则使用64位DLL。 –

相关问题