c++ - VS 2017 Community 出现链接器错误,但 Professional 没有
问题描述
我们面临一个奇怪的问题,我已经没有解决问题的想法了。问题是,在一些运行 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.lib
都已ndt-main-windows-x64-vc14.obj
被 Flexera 的lmstrip
工具混淆。)
解决方案
事实证明,当我们要求他们将他们的 Visual Studio 2017 社区安装升级到最新的服务包版本时,链接器错误就消失了。
推荐阅读
- php - PHP - 如何检查输入过滤器是否有效?
- windows - CMD的帮助文件存放在Windows的什么位置
- php - Select2 在引导模式中未正确显示
- python - Pip 安装 psycopg2 失败
- reporting-services - SSRS 报告在第 1 页后呈现不同
- c# - 当用户单击列表中的项目时,如何从 Sharepoint 中检索项目 ID?
- c++ - 有没有办法在 c++ 和 winapi 中获得本机分辨率?
- javascript - Chrome - Javascript:负指数计算对于 > -3 是错误的
- redis - 使用 redis sentinel 时,如何使用密码保护主节点和副本节点?
- ibm-watson - 在哪里可以找到用于调用请求的 Watson Assistant ID?