2012-05-11 29 views
0

OpenCVでBRIEFとORBを使用し、OpenCVでSSE4.2を使用して(高速マッチングのために)OpenCVをコンパイルする必要があります。 SSE4.2オプションが有効になっています。OpenCVでのgcc 4.3以上でのOpenCVコンパイルエラー

私のMac OS X 10.6.8のデフォルトバージョンであるgcc4.2.1でOpenCVをコンパイルするのに問題はありません。

次にMacportsを使ってgcc4.3、4.4,4.5,4.6,4.7,4.8をインストールし、gccを新しいものに切り替えました。 OpenCV Webサイトの指示のようなデフォルト設定でOpenCVをインストールしようとしました。しかし、gcc4.2.1を使ったときのようにコードをコンパイルできませんでした。 gcc4.2.1では問題ありません。問題はgcc4.3以上で発生します。

問題はどこから来たのですか?エラーはコンパイラの互換性から来ているようです。

一部のエラーは、次のとおりです。

OpenCV-2.4.0/modules/highgui/src/window_cocoa.mm: In function 'void cvDestroyAllWindows()': 
OpenCV-2.4.0/modules/highgui/src/window_cocoa.mm:198:21: error: expected ';' before 'in' 
OpenCV-2.4.0/modules/highgui/src/window_cocoa.mm:198:21: error: 'in' was not declared in this scope 
OpenCV-2.4.0/modules/highgui/src/window_cocoa.mm:198:24: error: expected ';' before 'list' 


In file included from /opt/local/include/libavformat/avformat.h:42:0, 
       from OpenCV-2.4.0/modules/highgui/src/ffmpeg_codecs.hpp:78, 
       from OpenCV-2.4.0/modules/highgui/src/cap_ffmpeg_impl.hpp:56, 
       from OpenCV-2.4.0/modules/highgui/src/cap_ffmpeg.cpp:45: 
/opt/local/include/libavcodec/avcodec.h:554:1: internal compiler error: Segmentation fault 
Please submit a full bug report, 
+0

参考のため、違反コードは次のように見えます: 'for(NSString * list in key)'。私は通常、この 'in '構文をC++で使用しないので、あまりよく知られていませんが、他の人がそれを使って質問に答えることができます。 – TaZ

+0

さらに、 '内部コンパイラエラー:セグメンテーションフォールトは完全なバグレポートを提出してください.'恐ろしいかもしれませんが、gccのインストールに何か問題があったかもしれません。 – TaZ

答えて

0

問題がwindow_cocoa.mmでfor(NSString *key in list)は、Objective-Cの2構造であるということであるとObjective-C++のバージョンをサポートしていませんGNUから

gccのようにコンパイルされます2構文なのでコンパイルできません。 Appleのgcc4.2には、Objective C 2を含むApple拡張機能が含まれていますが、純粋なgccではありません。

あなたはclangコンパイラを試す必要があります。

+0

ありがとうございます。しかし、gcc4.2ではコンパイルに問題はありませんか?問題はgcc4.3以降で発生します。 – alibaba

+0

XcodeにはObjective Cバージョン2の構文を理解しているApple gcc4.2が含まれています。 – Mark

+0

しかしgcc4.2では、sse4.2(コアi7のPOPCNT命令)を有効にすることはできません。 – alibaba