链接到 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。
🏷️
标签
➡️