Microsoft Visual Studio 2011 Professional Betaを使用しています
CMakeとVisual Studio Complierを使用してコンパイルしたOpenCV C++ファイル( http://opencv.willowgarage.com/wiki/Welcome )を実行しようとしています。
ただし、プロジェクトのデバッグに行くと、600以上のエラーが発生します。ほとんどのエラーは次のとおりです。
エラーLNK2026:SAFESEHイメージのモジュールは安全ではありません。
どうやらこれらのファイルはopencv_ffmpegプロジェクトにありますが、見つけることができませんでした。Microsoftヘルプページのsafeseh Safe Exception Handlersページを見てきましたが、明確な答えが見つかりませんでした。
他の誰かがこの問題を抱えていて、どうにかしてそれを修正できたのだろうかと思っていました。
コメントから:
これは、以前のバージョンのコンパイラで作成されたコードを含む.objまたは.libをリンクするときに発生します。もちろん、ソースではなくopencv_ffmpegのバイナリをダウンロードした場合によくあることです。リンカーオプションをオフにすることはできますが、それでもバイトが可能なCRTバージョンの非互換性があります。ソースからライブラリを再構築します。 –ハンズパッサン5月15日13:01
助けてくれて、うまくいきました。アーロン・トンプソン5月17日14:50
[プロジェクトプロパティ]-> [構成プロパティ]-> [リンカ]-> [詳細設定]タブで[画像に安全な例外ハンドラー]オプションを無効にすると役に立ちました。
Visual StudioでZLIBをビルド中にこのエラーが発生した場合は、解決策があります。 contrib\masmx86\bld_ml32.bat
を探し、オプションとして/safeseh
を追加します
前
ml /coff /Zi /c /Flmatch686.lst match686.asm
ml /coff /Zi /c /Flinffas32.lst inffas32.asm
後
ml /safeseh /coff /Zi /c /Flmatch686.lst match686.asm
ml /safeseh /coff /Zi /c /Flinffas32.lst inffas32.asm
他の方法は、いくつかのSEHハンドラー(たとえば空)をasmファイルに追加し、/safeseh
オプションでコンパイルしてから、通常/SAFESEH:YES
コンパイラーオプションで他のコードをコンパイルします。
空のSEHハンドラー:
.safeseh SEH_handler
SEH_handler proc
;handler
ret
SEH_handler endp
マイレージは異なる場合がありますが、上記の提案はどれもうまくいきませんでした(ただし、独自のasm例外ハンドラーを実行しようとしませんでした)。
動作したのは、ビルドターゲットRelease/x64を選択することでした。
64ビットマシンでWindows 10を実行し、Visual Studio 2015を使用しています。
ターゲットRelease/Win32も機能します。主なことは「リリース」を選ぶことだと思います。