2013-10-09 68 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。 –

相關問題