最近安装了Visual Studio 2022,想试下opengl,首先是用cmake尝试编译,结果编译不过,一直报错 LINK : fatal error LNK1104: 无法打开文件“ucrtd.lib”

然后我新建了一个工程,导入了glfw的包打算编译一下,结果好家伙,一编译一大堆报错,全是什么 E1696 无法打开 源 文件 crtdbg.h之类的

网上说什么重装windows 10 sdk的,试了完全不起作用。我又试下装了VS2019,这个是没有问题的,开始怀疑是系统依赖路径的锅,于是我打开VS2022的include和lib的目录看了下

把默认的配置拷贝了出来,这是包含目录的配置

C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\include
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\atlmfc\include
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\VS\include
C:\Program Files\Windows Kits\10\Include\10.0.19041.0\ucrt
C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\um
C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\shared
C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\winrt
C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\cppwinrt
C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\Include\um

这是库目录的配置

C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\lib\x64
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\atlmfc\lib\x64
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\VS\lib\x64
C:\Program Files\Windows Kits\10\lib\10.0.19041.0\ucrt\x64
C:\Program Files (x86)\Windows Kits\10\lib\10.0.19041.0\um\x64
C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\lib\um\x64

结果发现这里C:\Program Files\Windows Kits\10\Include\10.0.19041.0\ucrtC:\Program Files\Windows Kits\10\lib\10.0.19041.0\ucrt\x64两个目录我本地压根不存在,这就找到原因了,ucrt这个东西lib和include目录都不存在,到哪里去了呢?我按照其他几个目录结构去找,结果找到了两个目录

C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\ucrt
C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\ucrt

注意区分,这里其实就是目录多了个x86(以及lib大小写),这两个才是真正的安装依赖路径,至于默认的路径为什么是前面那个就不清楚了。可能软件安装本身有问题,也可能是我机器的原因,总之是个比较坑的点。

那么问题就很好解决了,把下面这两个目录文件分别拷贝到上面两个目录就行了(这样更方便一点,因为VS改默认依赖路径很麻烦),再精确一点就是:

复制include目录
mkdir C:\Program Files\Windows Kits\10\Include\10.0.19041.0\ucrt
copy C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\ucrt\* C:\Program Files\Windows Kits\10\Include\10.0.19041.0\ucrt
复制lib目录
mkdir C:\Program Files\Windows Kits\10\lib\10.0.19041.0\ucrt
copy C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\ucrt\* C:\Program Files\Windows Kits\10\lib\10.0.19041.0\ucrt

 这不是可用的脚本,只是大概表达这个意思,先去创建好两个目录,然后把文件复制过去就好了。亲测有效

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐