2014年4月27日日曜日

OpenCV 2.4.9 ビルドと/Zmオプション(C1076)

OpenCV 2.4.9のビルド時にC1076エラーが発生した

Windows + VC11ビルドでC1076, C3859エラー

OpenCV2.4.9をWindowsでVisual C++2012(VC11)を用いてビルドしたところ次のエラーがopencv_contrib, opencv_stitchingで発生しました.コレに追随して依存しているモジュールもビルドが出来ませんでした.

error C1076: コンパイラの制限 : 内部ヒープの上限に達しました。上限を変更するには /Zm オプションを使用してください。

error C3859: PCH の仮想メモリの範囲が超えています。'-Zm118' 以上のコマンド ライン オプションで再コンパイルしてください。




このC1076というエラー「このエラーは、シンボルが多すぎるか、テンプレートのインスタンス生成が多すぎることが原因で発生する場合が」あるそうです.(参照)

というわけで該当したopencv_contrib, opencv_stitichingに/Zmオプションを追加してみます.

/Zmオプションの追加

opencv_contribとopencv_stitchingのプロパティそれぞれを開き
「C/C++」→「コンパイラオプション」を開き/Zmオプションを追加します.


また,Debug, Releaseの共通するオプションであるため,「構成」を「すべての構成」にします.

エラーではZm118以上を指定するようにされていました.数値が多きほど割り当てられるメモリ量が大きくなるようですね.ここでは150を指定してみます./Zmと150の間に空白をいれません.

/Zm150と追加したところ

総括

OpenCV2.4.9のビルドではopencv_contribとopencv_stichingに/Zmオプションを追加してビルドします.(たしかOpenCV2.4.8でもいくつかのモジュールに同様の設定を行わなければいけなかったはず...)