2016-12-24 3 views
-1

私は知っている...これの別のもの...しかし、他の人のエラーは私のものと同じではなく、私は今mingw32でopencvを構築しようとしています。CantビルドOpenCV 3.2.0(Mingw32)

mingwのでコマンドをOpenCVのを構築mingw32-makeがエラーPIC怒鳴るとsources\modules\ts\src\ts_gtest.cppをコンパイルしようとしているいくつかの時点で失敗:

mingw32-make compile error

私はいくつかのチュートリアル以下試みたが、いずれも作業きれいにし、これがありました最高の仕事をすることができました。

私がやったこと:Mingwをし

  • をインストールし、PATH環境変数にC:\Mingw\bin\を追加しました。
  • CMakeをインストールし、PATHにも追加しました。
  • C:\から
  • 抽出OpenCVのとCMakeの-GUIでC:\opencv\mingwBuild\
  • forlder作成された私はC:\opencv\sources\としてソースフォルダを定義し、C:\opencv\mingwBuild\としてフォルダを構築します。
  • ヒット[Mingw Makefiles]を設定し、[デフォルトのネイティブコンパイラを使用](明示的にコンパイラを指定して、結果は同じです)を選択します。
  • Hit Generate:Makefileを作成します。
  • 私はC:\Mingw\msys\1.0\msys.batを開いて、すべての変数がロードされたコンソールを持っています(単純なcmd.exeから直接試してみました.PATHはmingwに設定されていますが、コンパイル時に同じエラーが発生します)。 C:\opencv\mingwBuild\に移動し、mingw32-makeを実行します。

これはしばらくしてエラーが表示される場所です。何か案は?

+0

に置き換えられます。エラーをテキストとして入力します。 – tambre

+1

Googleテストの問題のようです。 [\ [1 \]](https://github.com/google/googletest/issues/708)[\ [2 \]](https://github.com/google/googletest/issues/484) –

答えて

0

何らかの理由でgTestがMingwでコンパイルされませんでした。 私はコードをテストするつもりはないので(今のところ)、私はインストールからopencv_tsを削除しました(設定して生成する前にCmakeで選択を解除することによって)。

誰かが最初にlink @ダンMasekを参照して、GTestはこの問題がmingwの下での型変換であると言います。エラーメッセージに従って、ts_gtest.cppを編集して正しい変換を適用できるとしています。このモジュールが必要な場合は、それが解決策になるかもしれません。

@Dan Masekのもう1つのコメントlinkは、gccのバージョン5がバージョン4の問題を上回っていると述べています。したがって、そのようなディストリビューションを手に入れることも解決策になるかもしれません。

-1

は、私にとっては、この修正プログラムを適用することによって、固定されているようだ:https://github.com/msk-repo01/opencv/commit/9a1835ce6676836ce278d723da4ff55a8f900ff1

(参照:https://github.com/opencv/opencv/issues/8105)を

は、修正プログラムは基本的にモジュール/ tsの中MinGWのコンパイラのための「_CRITICAL_SECTION」で「_RTL_CRITICAL_SECTION」を置き換えます次のように/include/opencv2/ts/ts_gtest.h: 線

// assuming CRITICAL_SECTION is a typedef of _RTL_CRITICAL_SECTION. 
// This assumption is verified by 
// WindowsTypesTest.CRITICAL_SECTIONIs_RTL_CRITICAL_SECTION. 
struct _RTL_CRITICAL_SECTION; 

(線723の周りに12月からOpenCVの3.2.0リリースで2016年)が

# if GTEST_OS_WINDOWS_MINGW 
    // MinGW defined _CRITICAL_SECTION and _RTL_CRITICAL_SECTION as two 
    // separate (equivalent) structs, instead of using typedef 
    typedef struct _CRITICAL_SECTION GTEST_CRITICAL_SECTION; 
# else 
    // assuming CRITICAL_SECTION is a typedef of _RTL_CRITICAL_SECTION. 
    // This assumption is verified by 
    // WindowsTypesTest.CRITICAL_SECTIONIs_RTL_CRITICAL_SECTION. 
    typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; 
# endif 

_RTL_CRITICAL_SECTION* critical_section_; 

によって置き換えられているスクリーンショットのように接続しないでください

GTEST_CRITICAL_SECTION* critical_section_; 
関連する問題