【问题标题】:VC++ 2015 doesn't link but VC++ 2012 didVC++ 2015 没有链接,但 VC++ 2012 链接了
【发布时间】:2016-11-16 11:59:58
【问题描述】:

在将我们的项目从 VS2012 更新 4 移动到 VS2015 更新 3 时,我遇到了一个奇怪的错误。在解决方案中,一半的项目使用 VC++ (MSVC 14.0) 编译,一半的项目使用英特尔 C++ 13.0 编译。

一切都正确编译。

在需要链接时会出现问题。我收到类似这样的错误,似乎在 std 文件中...

Error   LNK2019 

unresolved external symbol 

"public: virtual void __cdecl std::basic_istream<wchar_t,struct
std::char_traits<wchar_t> >::_Add_vtordisp1(void)"
(?_Add_vtordisp1@?$basic_istream@_WU?$char_traits@_W@std@@@std@@UEAAXXZ) 

referenced in function 

"[thunk]:public: virtual void __cdecl std::basic_istream<wchar_t,struct
std::char_traits<wchar_t> >::_Add_vtordisp1`vtordisp{4294967292,128}'
(void)" (?_Add_vtordisp1@?$basic_istream@_WU?$char_traits@_W@std@@@std@@$4PPPPPPPM@IA@EAAXXZ)

我既不能用尖峰解决方案重现这个错误,也不能给你一段出现错误的代码,因为它似乎在std

当我查看文件 istream 时,我发现了类似 #pragma vtordisp(push,2) //compiler bug workaroung 的内容,但我不知道它是什么错误或如何修复它。

任何线索/提示将不胜感激。

谢谢!

【问题讨论】:

  • 所以拿下这个项目吧。消除一半。问题是否仍然存在?是的?重复,直到你有一些绝对最小的东西。不?消除另一半。这需要努力,但至少应该让你某处 towarsa minimal reproducible example
  • @Yakk 我只是想知道是否有人遇到同样的问题。当然,我得用二分法……
  • 您是否会链接使用不同版本的 MSVC 编译的模块?
  • @dxiv 不。我从一个干净的工作区重建。我怀疑我错过了指向英特尔库的链接,因为我没有重新安装 ICC,但我保留了旧安装。当使用 MSVC 编译的 C++/CLI 尝试链接到使用 ICC 编译的 .lib 时,会发生该错误。我想我必须重新安装 ICC 以确保 VS2015 的所有设置都是正确的。
  • 我没有看到 VC++ 2015 被列为 /Qvc 的选项,即使是 Intel C++ 14,所以它也可能不适用于 v13。

标签: c++ c++11 visual-c++ visual-studio-2015 stl


【解决方案1】:

安装 Windows 10 SDK,然后重新定位您的解决方案以使用这个最新的 SDK。还要确保您的代码应该正确迁移到 VS 2015,并且您在项目中使用的依赖项应该是 VS 2015,否则它会给出另一个错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    相关资源
    最近更新 更多