首页 文章

如何在Visual Studio 2015中更新我的C项目以使用新的通用CRT?

提问于
浏览
13

在VS2015将我的项目更新到新的Platform工具集v140之后,由于链接器错误而无法构建:LNK1104无法打开文件'libucrt.lib' .

由于本文中提到的新的Universal CRT,这个库似乎已被移动:http://blogs.msdn.com/b/vcblog/archive/2015/03/03/introducing-the-universal-crt.aspx?PageIndex=2 .

虽然文章告诉我现在应该链接什么,但它没有提供如何说明 .

我的解决方案生成一个.exe和它使用的.dll . 我不知道如何处理下面文章描述的矩阵 .

发布DLL(/ MD):msvcrt.lib vcruntime.lib ucrt.lib

释放静态(/ MT):libcmt.lib libvcruntime.lib libucrt.lib

4 回答

  • 10

    默认情况下,如果使用vs2015编译项目,则将使用Universal CRT . (没有什么特别需要做的)

    但是如果你想静态链接(并摆脱ucrt依赖) - 阅读这篇文章:

    Visual studio 2015 run-time dependencies or how to get rid of Universal CRT?

  • 2

    转换项目时,需要确保更新包含和链接器设置以指向新CRT .

    对于包含,请添加以下内容:

    $(UniversalCRT_IncludePath)
    

    对于链接,根据目标处理器添加以下内容之一:

    $(UniversalCRT_LibraryPath_x86)
    $(UniversalCRT_LibraryPath_x64)
    $(UniversalCRT_LibraryPath_arm)
    
  • 2

    内置变量 $(LibraryPath) 解析为在Visual Studio中构建应用程序所需的所有库路径,包括VS 2015中的UCRT路径 .

    注意:您可能还想更新包含路径,可移植的内置变量是: $(IncludePath) .

    或者更好的是,如果您不需要库或包含路径自定义,则使用默认值(选择 <inherit from parent or defaults> ) .

    注意2:您可以同时调整多个项目和多个目标的路径,只需选择多个项目,然后选择"properties" .

  • 3

    我已经下载了SDK 10.0.10586.0,它现在包含C:\ Program Files(x86)\ Windows Kits \ 10 \ Lib \ 10.0.10586.0 \ ucrt \ x64中的库libucrt.lib . 但我无法让链接器找到这个库;它使用10240(以前安装的版本) .

    上面提到的宏$(LibraryPath)和$(UniversalCRT_LibraryPath_x64)都是指C:\ Program Files(x86)\ Windows Kits \ 10 \ lib \ 10.0.10240.0 \ ucrt \ x64 . 我不知道如何更改这些宏的值,这可能是让链接器使用正确的库所必需的 .

    Windows 7 Pro,64位,Visual Studio 2015更新1.链接静态库,C和英特尔Fortran项目 .

相关问题