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組み込みを使用するように変更する必要がありますか?