链接到 ucrtbase.dll

💡 原文中文,约1300字,阅读约需4分钟。
📝

内容提要

使用VS编译器生成的exe文件依赖于特定版本的msvcrXXX.dll,需附带安装程序。微软推出UCRT解决了这一问题,支持静态C++库动态链接C运行时,从而减小二进制体积。VS2022默认使用UCRT,CMake配置可通过链接动态库实现。

🎯

关键要点

  • 使用VS编译器生成的exe文件依赖于特定版本的msvcrXXX.dll,需附带安装程序。
  • 微软推出UCRT解决了这一问题,支持静态C++库动态链接C运行时。
  • UCRT是微软重写的C运行时,名为ucrtbase.dll和ucrtbased.dll。
  • UCRT允许静态C++库使用动态C运行时,从而减小二进制体积。
  • VS2022默认使用UCRT,CMake配置可通过链接动态库实现。
  • 在CMake中启用UCRT的方式是通过add_link_options和link_libraries指令。
  • 使用llvm-mingw项目的clang编译器可以实现release版本连接到ucrtbase.dll。

延伸问答

UCRT是什么,它解决了什么问题?

UCRT是微软重写的C运行时,解决了exe文件依赖特定版本msvcrXXX.dll的问题,允许静态C++库动态链接C运行时,从而减小二进制体积。

如何在CMake中启用UCRT?

在CMake中启用UCRT的方式是通过add_link_options和link_libraries指令来配置。

VS2022默认使用什么运行时?

VS2022默认使用UCRT作为运行时。

UCRT与旧版msvcrt.dll的主要区别是什么?

UCRT允许静态C++库使用动态C运行时,而旧版msvcrt.dll要求静态C++库使用静态C库。

使用llvm-mingw的clang编译器有什么优势?

使用llvm-mingw的clang编译器可以实现release版本连接到ucrtbase.dll,避免了api-ms-*.dll的依赖。

UCRT如何影响二进制文件的体积?

UCRT允许静态C++库动态链接C运行时,从而减小二进制文件的体积,通常可以减少几百KB。

➡️

继续阅读