2013-01-31 28 views
10

を生成することができませんコンパイルlibffiが致命的なエラーLNK1281で失敗:VS11とlibffiをコンパイルSafeSEHをイメージ

libffi\libffi-3.0.9\ms\Win32\Debug\ffi.dll : fatal error LNK1281: Unable to generate SAFESEH image. 

次のリンカエラーを与える同じプロジェクトはVS10で罰金コンパイルするが、VS2012での自動アップグレード後にされました、それはリンカエラーに与え始め

MSDNでの説明は、私は/SAFESEH:NOで再構築可能性がある

あまりにも不可解と少なくとも便利ですが、私は意味合いが不明です。

どうか間違っている可能性がありますので教えてください。

答えて

20

SAFESEHを持たないことの主な意味は、アプリケーションがWindows 8ストアまたはWindows 8 desktop certificationのために受け入れられないことです。これが問題ではない場合は、/SAFESEH:NOを自由に使用してください。

documentationは言う:リンカへの入力ファイル(モジュール)の1つ以上が安全と互換性がありませんでしたので、画像を生成できるようにするためではないリンカ

最も一般的な理由があります例外ハンドラ機能。モジュールが安全な例外ハンドラと互換性がない一般的な理由は、以前のバージョンのVisual C++のコンパイラで作成されたためです。

プロジェクトをVS2012にアップグレードすると、設定が/SAFESEH:YESに変更された可能性がありますか。おそらく、あなたはSAFESEHでビルドしたことはありません。

+0

ありがとうございました。あなたは救い主です。ところで、これがどこかに書かれているのか知っていますか?SAFESEHを持たないことの主な意味は、あなたのアプリケーションがWindows 8ストアで受け入れられないということです。これが問題でない場合は、/ SAFESEH:NOを使用してください。 ' – Abhijit

+0

私はそれについてのドキュメントを見つけることはないと思います。 SafeSEHが必要なWindows 8ストアが簡単に見つかります。しかし、それが主な意味合いであるとして、それはどこにも書かれておらず、主に意見のポイントです。 SafeSEHは長年にわたって使用されてきました。多くのコンパイラは、必要な例外テーブルを生成することさえできません。そしてもちろん、それは32ビットのアプリケーションのためだけに意味を持っているので、遠ざかりつつあります。 64ビットのアプリを書くと、実行可能ファイルに例外テーブルが含まれている必要があります。 –

+1

ありがとう!私は検索し、私の問題に正確にマッチするStackOverflowでヒットを見つけるのが大好き! – cplotts

関連する問題