我刚刚安装了VS2012测试版,并升级了我的VS2010项目,它看起来像它应该编译的那样,但是在链接时,我得到以下错误:
1>LIBCMTD.lib(excptptr.obj):error LNK2019:未解析的外部符号__Atomic_fetch_add_4,在函数"unsigned long __cdecl std::_Inc_atomic_counter_explicit“中引用。“(?_Inc_atomic_counter_explicit@std@@YAKAAKW4memory_order@1@@Z) 1>LIBCMTD.lib(excptptr.obj):error LNK2019:未解析的外部符号__Atomic_fetch_sub_4”函数中引用的“未签名的long __cdecl std::_Dec_atomic_counter_explicit(无符号的long &,enum std::memory_order)”,(?_Dec_atomic_counter_explicit@std@@YAKAAKW4memory_order@1@@Z)
谷歌没有提到这些错误信息,这是令人惊讶的。看起来__Atomic_fetch_add_4应该是fetchadd4操作代码的一个内在特性,但它不是(据我所知),正确的内在特性是_InterlockedIncrement。
我不知道是什么导致了这一切。有趣的是,它来自excptptr.obj,我在这个项目中禁用了C++异常。使它们发挥作用并没有什么区别。
编辑:我注意到在谷歌时,这个符号似乎只被GNU代码引用。也许MS已经更新了VS2012的STL,并引入了一些尚未捕获的GNU参考代码;需要修改以使用MS内部吗?
发布于 2012-08-30 13:51:57
我的一个用VS2010编译的项目也有类似的问题,在用VS2012编译时得到了未解决的外部符号__Atomic_fetch_add_4错误。我不知道为什么会发生这种情况,但经过“干净的解决方案”和“重建一切”之后,问题就消失了。我怀疑在那里,旧的obj文件是造成问题的原因。
https://stackoverflow.com/questions/11730461
复制相似问题