【问题标题】:VS 2017 Community gets linker errors but Professional doesn'tVS 2017 Community 出现链接器错误,但 Professional 没有
【发布时间】:2019-02-25 01:06:00
【问题描述】:

我们遇到了一个奇怪的问题,我已经没有解决问题的想法了。问题是在一些运行 Visual Studio 2017 Community 的机器上,我们收到报告称我们的项目(基于 CMake)出现如下链接器错误:

17>------ Build started: Project: ndt, Configuration: RelWithDebInfo x64 ------
17>   Creating Library E:/NDT_3_0/19_Sept18/qualnet/RelWithDebInfo/exata_so.lib and object E:/NDT_3_0/19_Sept18/qualnet/RelWithDebInfo/exata_so.exp
17>ndt-main-windows-x64-vc14.obj : error LNK2019: unresolved external symbol edKJPOs664VT referenced in function "void __cdecl CheckLibraryLicenses(struct NodeInput*,...)
17>ndt-main-windows-x64-vc14.obj : error LNK2019: unresolved external symbol zzPIPSGJWa referenced in function main
...
17>E:\NDT_3_0\19_sep18\qualnet\bin\exata_so.exe : fatal error LNK1120: 17 unresolved externals

(抱歉,如果有错别字:出于某种原因,他们向我们发送了文本的屏幕截图,而不仅仅是文本的复制和粘贴,所以我正在转录。但是,我遗漏的部分包含没有提及尝试打开定义这些符号的lmgr.lib 时出错。)

奇怪的是,当我们对他们正在使用的同一个 Bitbucket 存储库进行全新克隆并遵循相同的构建说明时,我们无法在此处重现这些错误。我能说的唯一区别是我们的机器运行的是 Visual Studio 2017 Professional。 (虽然我当然不确定这是否真的是行为差异的原因。)

到目前为止,我们已经检查过:

  • 包含未解析外部符号的库通过了 sha1sum 检查,因此他们的 Git 客户端不会损坏库二进制文件 lmgr.lib - ndt-main-windows-x64-vc14.obj 文件也是如此。
  • 生成的 ndt.vcxproj 项目在“链接器 -> 输入 -> 附加依赖项”属性中包含(正确路径)lmgr.lib,正如预期的那样。
  • lmgr.lib 文件确实定义了上述符号(由 Cygwin binutils nm 验证)。
  • 在他们的机器上,无论是使用Visual Studio 15 2017 Win64 生成器并从IDE 构建,还是使用NMake Makefiles 生成器并从命令提示符构建,它们都会遇到基本相同的链接器错误。两种配置都可以在我们的机器上正常运行。

我想知道是否有人对为什么某些机器可能无法找到 lmgr.lib 中的符号而我们的机器在完成链接阶段没有问题有任何想法。

(可能相关:lmgr.lib 包含 FlexNet Publisher 许可库,其中 lmgr.libndt-main-windows-x64-vc14.obj 中的符号已被 Flexera 的 lmstrip 工具混淆。)

【问题讨论】:

    标签: c++ linker visual-studio-2017


    【解决方案1】:

    事实证明,当我们要求他们将他们的 Visual Studio 2017 Community 安装升级到最新的服务包版本时,链接器错误就消失了。

    【讨论】:

      猜你喜欢
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      • 2022-10-20
      • 1970-01-01
      • 2015-12-23
      • 1970-01-01
      • 2016-06-16
      • 1970-01-01
      相关资源
      最近更新 更多