【问题标题】:CMake cannot open "ucrtd.lib"CMake 无法打开“ucrtd.lib”
【发布时间】:2019-10-02 08:21:50
【问题描述】:

我的问题与此类似:Problems generating solution for VS 2017 with CMake,但该解决方案对我不起作用。

VS 2017 的开发人员命令提示符 中运行 cmake 时,我收到错误消息(来自 CMakeError.log):

LINK:致命错误 LNK1104:无法打开文件“ucrtd.lib”[E:\Projects\My Project\VS\CMakeFiles\3.14.4\CompilerIdC\CompilerIdC.vcxproj]

但文件ucrtd.lib 位于Windows Kits 文件夹中。

回显 %LIB%

D:\Program Files (x86)\Microsoft Visual Studio 2017 Community\VC\Tools\MSVC\14.16.27023\lib\x86;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\ lib\um\x86;C:\Program Files (x86)\Windows Kits\10\lib\10.0.17763.0\ucrt\x86;C:\Program Files(x86)\Windows Kits\10 \lib\10.0.17763.0\um\x86;

dir "C:\Program Files (x86)\Windows Kits\10\lib\10.0.17763.0\ucrt\x86\" /w /b

libucrt.lib
libucrtd.lib
ucrt.lib
ucrtd.lib

我也尝试手动运行CMakeError.log中列出的构建命令,成功,没有错误。

CL.exe /c /nologo /W0 /WX- /diagnostics:classic /Od /Oy- /D _MBCS /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Fo"Debug\" /Fd"Debug\vc141.pdb" /Gd /TC /analyze- /FC /errorReport:queue CMakeCCompilerId.c

link.exe /ERRORREPORT:QUEUE /OUT:".\CompilerIdC.exe" /INCREMENTAL:NO /NOLOGO kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /PDB:".\CompilerIdC.pdb" /SUBSYSTEM:CONSOLE /TLBID: 1 /DYNAMICBASE /NXCOMPAT /IMPLIB:".\CompilerIdC.lib" /MACHINE:X86 /SAFESEH Debug\CMakeCCompilerId.obj

所以看起来 cmake 没有识别环境变量,还是我错过了一些重要的步骤?

cmake 版本是 3.14.4
Visual Studio 版本是 15.9.7

【问题讨论】:

  • 您是否尝试明确告诉 CMake 以您已安装的特定 Windows 版本为目标:-DCMAKE_SYSTEM_VERSION=10.0.17763.0?见帖子here
  • 太棒了!添加此作为答案。上述帖子显示CMake会检查Windows Kits根文件夹的一些注册表值,如果安装了多个VS版本,可能会首先找到错误的。

标签: visual-studio cmake


【解决方案1】:

正如this CMake 论坛中提到的,可能需要明确告诉 CMake 您安装了哪个特定的 Windows 版本。考虑到您安装了 10.0.17763.0 版本,包括以下定义会将 CMake 定向到该版本:

cmake -DCMAKE_SYSTEM_VERSION=10.0.17763.0

这里是docs 对应CMAKE_SYSTEM_VERSION

【讨论】:

    【解决方案2】:

    here 所述,如果您使用的是 VS2022,并且您安装的 Windows SDK 版本为 10.0.19041.0(在撰写本文时默认安装的是 VS2022),那么您可能遇到了这种情况。

    这种情况下的解决方案是卸载该 SDK 版本并安装其他版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-21
      相关资源
      最近更新 更多