1

VS2012 ベータ版をインストールし、VS2010 プロジェクトをアップグレードしたところ、正常にコンパイルされたように見えますが、リンク時に次のエラーが発生します。

1>LIBCMTD.lib(excptptr.obj) : エラー LNK2019: 関数で参照されている未解決の外部シンボル __Atomic_fetch_add_4 "unsigned long __cdecl std::_Inc_atomic_counter_explicit(unsigned long &,enum std::memory_order)" (?_Inc_atomic_counter_explicit@std@@YAKAAKW4memory_order@ 1@@Z) 1>LIBCMTD.lib(excptptr.obj): エラー LNK2019: 関数で参照されている未解決の外部シンボル __Atomic_fetch_sub_4 std@@YAKAAKW4memory_order@1@@Z)

驚くべきことに、Google はこれらのエラー メッセージについて言及していません。fetchadd4オペコードの組み込みであるように見えますが、そう__Atomic_fetch_add_4ではありません(私が知る限り)、適切な組み込みは_InterlockedIncrement.

何が原因なのかわかりません。興味深いことに、それは から来ておりexcptptr.obj、このプロジェクトでは C++ 例外を無効にしています。それらを有効にしても違いはありませんでした。

編集: グーグルで検索すると、このシンボルは GNU コードによってのみ参照されているように見えることに気付きました。おそらく、MS は VS2012 の STL を更新し、まだ発見されていない GNU 参照コードをいくつか取り込んでいます。MS組み込みを使用するように変更する必要がありますか?

4

1 に答える 1

0

私はVS2010でコンパイルされ、VS2012でコンパイルされたときに未解決の外部シンボル__Atomic_fetch_add_4エラーを取得した私のプロジェクトで同様の問題を抱えていました。なぜそれが起こったのかわかりませんでしたが、「クリーンな解決策」と「すべてを再構築」した後、問題はなくなりました。問題の原因となった古いobjファイルがどこにあるかと思います。

于 2012-08-30T13:51:57.280 に答える