1

私は opencv、C++、および Eclipse CDT スターターです。opencvを学ぶためにチュートリアルに従っていました。しかし、プログラムのコンパイルには成功したものの、実行後すぐにクラッシュしてしまいました。関連する多くの Q&A を読みましたが、有効な解決策が得られませんでした。どんな提案でも大歓迎です。以下は、参照用の仕様です。

システム設定

  • OS : 32 ビット Windows 7 Professional (仮想マシン)
  • IDE : Eclipse Kepler 用の CDT 8.2.0
  • C/C++ コンパイラ: mingw32-gcc (4.8.1)
  • OpenCV パッケージ: opencv2.4.6

詳細な手順

  • ダウンロードして抽出したEclipse
  • C:\MinGW に MinGW をインストールします。システムパス[PATH]に「C:\MinGW\bin」を設定
  • C:\opencvにOpenCVをダウンロードして実行。システムパス[PATH]に「C:\opencv\build\x86\mingw\bin」を設定
  • Eclipse を起動し、Eclipse で:
    • File>New>C++ Project : Project name->OpenCVTest、Project Type->Hello World C++ Project、Toolchains->MinGW GCC
    • 終了
    • [プロジェクト] > [プロパティ] > [C/C++ ビルド] > [設定] > [ツール設定] > [GCC C++ コンパイラ] > [インクルード] > [インクルード パス (-I)]で、「C:\opencv\build\include」を追加しました。
    • Project>Properties>C/C++ Build>Settings>Tool Settings>MinGW C++ Linker>Libraries>Libraries (-l)で、opencv_core246、opencv_highgui246、opencv_imgproc246 を 1 つずつ追加しました。
    • Project>Properties>C/C++ Build>Settings>Tool Settings>MinGW C++ Linker>Libraries>Libraries search path (-L)に「C:\opencv\build\x86\mingw\lib」を追加しました。
  • OpenCVTest.cpp ファイルの内容を次の内容に置き換えました。

    #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <iostream>
    
    using namespace cv;
    using namespace std;
    
    int main( int argc, char** argv )
    {
        if( argc != 2)
        {
         cout <<" Usage: display_image ImageToLoadAndDisplay" << endl;
         return -1;
        }
    
        Mat image;
        image = imread(argv[1], CV_LOAD_IMAGE_COLOR);   // Read the file
    
        if(! image.data )                              // Check for invalid input
        {
            cout <<  "Could not open or find the image" << std::endl ;
            return -1;
        }
    
        namedWindow( "Display window", CV_WINDOW_AUTOSIZE );// Create a window for display.
        imshow( "Display window", image );                   // Show our image inside it.
    
        waitKey(0);                                          // Wait for a keystroke in the window
        return 0;
    }
    
  • プロジェクトをビルドし、次のコンソール出力を取得しました (成功したと仮定):

    Info: ビルドには内部ビルダーが使用されています g++ "-IC:\opencv\build\include" -O0 -g3 -Wall -c -fmessage-length=0 -o "src\OpenCVTest.o" "..\src\OpenCVTest .cpp" g++ "-LC:\opencv\build\x86\mingw\lib" -o OpenCVTest.exe "src\OpenCVTest.o" -lopencv_core246 -lopencv_highgui246 -lopencv_imgproc246

  • 生成された .exe をイメージ パスを渡さずに実行すると (動作するはずです)、プログラムは次のプロンプトでクラッシュしました。

    問題の署名: 問題イベント名: APPCRASH アプリケーション名: OpenCVTest.exe アプリケーション バージョン: 0.0.0.0 アプリケーション タイムスタンプ: 5230da00 障害モジュール名: libstdc++-6.dll 障害モジュール バージョン: 0.0.0.0 障害モジュール タイムスタンプ: 522c646d 例外コード: c0000005 例外オフセット: 0001df4b OS バージョン: 6.1.7600.2.0.0.256.48 ロケール ID: 1033 追加情報 1: 4c0d 追加情報 2: 4c0d4d78887f76d971d5d00f1f20a433 追加情報 3: 4c0d 追加情報 4: 4c0d4d78887f7201d901d901

4

1 に答える 1

1

libstdc++-6.dll が原因ではないことが判明しました。関連スレッドの回答: OpenVC 2.4.5, eclipse CDT Juno, MinGW エラー 0xc0000005は実際に私の問題を解決しました。ビルド済み (opencv ダウンロードに付属) の opencv ライブラリ (*.dll) と再ビルド (上記のソリューションによる) ライブラリの両方をシステム パスの下に公開したままにしたため、成功しませんでした。その結果、私のプログラムはビルド済みのバージョンを使用し、新しいビルドを無視しました。ビルド済みの *.dll を再ビルドしたものに置き換えた後、プログラムは問題なく実行されました。

于 2013-09-12T05:37:55.760 に答える