1

我刚刚安装了 VS2012 beta,并升级了我的 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: 函数“unsigned long __cdecl std::_Dec_atomic_counter_explicit(unsigned long &,enum std::memory_order)”中引用的未解析的外部符号 __Atomic_fetch_sub_4 (?_Dec_atomic_counter_explicit@ std@@YAKAAKW4memory_order@1@@Z)

谷歌没有提及这些错误消息,这令人惊讶。看起来__Atomic_fetch_add_4应该是 fetchadd4 操作码的内在属性,但它不是(据我所知),正确的内在属性是_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 回答