web-dev-qa-db-ja.com

Visual Studio 2015の「未解決の外部シンボル__except_handler4_common」

Visual Studio 2015でレガシーVisual Studio 6.0 C++アプリケーションをコンパイルしています。このエラーに遭遇し、ネットを検索しても有用な情報が得られません。

LNK2019未解決の外部シンボル__except_handler4_commonが関数__except_handler4で参照されています(MSVCRT.lib)

コードのどこかで、現在のバージョンのMSVCRTに存在しないメソッド(?)を参照していることを理解しています。これに対する回避策/コンパイラフラグはありますか?

18
Mr. Awesome

エラーメッセージは、実際には、MSVCRT.LIBで定義されている関数__except_handler4が未定義のシンボル__except_handler4_commonを参照していることを示しています。つまり、この参照を行っているのはあなたのコードではなく、Visual Studio 2015のコードです。

シンボル__except_handler4_commonはvcruntime.libで定義されています。このファイルは自動的にリンクされるはずです。リンクされなかった理由はわかりません。プロジェクトオプション(「マルチスレッド(/ MT)」)で静的ランタイムライブラリを選択してから、手動でMSVCRT.LIB(動的Cランタイムライブラリの一部)を追加しましたか?

18
Ross Ridge

ライブラリプロジェクトで、[プロパティ]-> [C/C++]-> [コード生成]-> [ランタイムライブラリ]を確認します。

「マルチスレッドデバッグDLL」(/ MDd)に設定されている可能性があります。

その場合は、「マルチスレッドデバッグ」(/ MTd)に変更して、再構築してください(これでうまくいきました)。

5
Den-Jason

このエラーの理由は状況によって異なります。

私にとって、それはGUIの「ランタイムライブラリ」フィールドから選択するのではなく、リンカー入力の間に明示的にリストされた「libcmt.lib」と「libcmtd.lib」でした。

3
Serge Rogatch

私にとっては、非静的単体テストから静的プロジェクトのオブジェクトにリンクしていました。単体テストを静的ビルドに設定しようとしましたが、コンパイラ(VC++ 2015)でエラーAn internal error has occurred in the compilerが発生しました。結局、メインプロジェクトと単体テストプロジェクトの両方を「共有DLLでMFCを使用する」に設定すると、うまくいきました。

3
Michael