我刚刚安装了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在函数“unsigned long中引用 __cdecl std :: _ Dec_atomic_counter_explicit(unsigned long&,enum std :: memory_order)“ (?_Dec_atomic_counter_explicit @ @@ STD @ YAKAAKW4memory_order 1个@@ Z)
Google没有提及这些错误消息,这是令人惊讶的。
看起来好像__Atomic_fetch_add_4
应该是fetchadd4操作码的内在属性,但它不是(据我所知),正确的内在属性是_InterlockedIncrement
。
我不知道是什么原因引起的。有趣的是它来自excptptr.obj
,我在这个项目中禁用了C ++异常。启用它们没有任何区别。
编辑: 我注意到谷歌搜索时这个符号似乎只是被GNU代码引用。也许MS已经更新了VS2012的STL并引入了一些尚未被捕获的GNU参考代码;需要更改为使用MS内在?
答案 0 :(得分:0)
我遇到了类似的问题,我的一个项目是在VS2010中编译的,并且在VS2012中编译时得到了未解析的外部符号__Atomic_fetch_add_4错误。 我无法弄清楚为什么会发生这种情况,但在“清洁解决方案”和“重建所有”之后问题就消失了。我怀疑那里有旧的obj文件导致了这个问题。