web-dev-qa-db-ja.com

SAFESEHイメージC ++に対して安全でないモジュール

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ページを見てきましたが、明確な答えが見つかりませんでした。

他の誰かがこの問題を抱えていて、どうにかしてそれを修正できたのだろうかと思っていました。

83
Aaron Thompson

コメントから:

これは、以前のバージョンのコンパイラで作成されたコードを含む.objまたは.libをリンクするときに発生します。もちろん、ソースではなくopencv_ffmpegのバイナリをダウンロードした場合によくあることです。リンカーオプションをオフにすることはできますが、それでもバイトが可能なCRTバージョンの非互換性があります。ソースからライブラリを再構築します。 –ハンズパッサン5月15日13:01

助けてくれて、うまくいきました。アーロン・トンプソン5月17日14:50

59
Bo Persson

[プロジェクトプロパティ]-> [構成プロパティ]-> [リンカ]-> [詳細設定]タブで[画像に安全な例外ハンドラー]オプションを無効にすると役に立ちました。

134
Zhenya

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
10

他の方法は、いくつかのSEHハンドラー(たとえば空)をasmファイルに追加し、/safesehオプションでコンパイルしてから、通常/SAFESEH:YESコンパイラーオプションで他のコードをコンパイルします。

空のSEHハンドラー:

.safeseh SEH_handler

SEH_handler   proc
;handler
ret

SEH_handler   endp
8
DitherSky

マイレージは異なる場合がありますが、上記の提案はどれもうまくいきませんでした(ただし、独自のasm例外ハンドラーを実行しようとしませんでした)。

動作したのは、ビルドターゲットRelease/x64を選択することでした。

64ビットマシンでWindows 10を実行し、Visual Studio 2015を使用しています。

ターゲットRelease/Win32も機能します。主なことは「リリース」を選ぶことだと思います。

0
Bob Stine