c++ - 为什么即使我只使用 os api 也会自动链接 msvcrt.dll?

标签 c++ visual-studio

我正在使用 vs2010,每当我构建任何 Windows 应用程序(不使用 mfc 或标准库 - 仅原始 api)时,msvcrt.dll 都会链接到它。有很多应用程序是在 vs 上编译的,但没有这种依赖性。

如何从我的应用程序中删除 msvcrt.dll 依赖项。

最佳答案

那是 C 运行时库,没有运行时就无法构建 C++ 程序。

对于 Visual Studio 2010,您实际上会链接 msvcr100.dll,因为这是该版本编译器的 MSVC 运行时。普通的旧 msvcrt.dll 是 MSVC6 运行时,现在作为 Windows 系统组件提供。如果您的可执行文件链接到 msvcrt.dll,那么您必须链接到其他东西,而这些东西又链接到 msvcrt.dll,因为 VS2010 中的任何内容都不会依赖 MSVC6 运行时。

您可以使用 static linking (/MT) 删除对 msvcr100.dll 的依赖。但是选择该选项有利有弊。如果您使用静态链接,那么您可以将您的应用程序作为单个可执行文件分发。如果您使用动态链接,那么您必须在每台目标机器上安装运行时。使用某些第三方库将强制您使用动态链接,以便运行时可以在您的可执行文件和第三方库之间共享。

关于c++ - 为什么即使我只使用 os api 也会自动链接 msvcrt.dll?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8455638/

相关文章:

c++ - operator >> 未定义 为什么?

c++ - 模块 : AHBot (no matching constructor for initialization of 'WorldSession' )

c++ - 将 MATLAB 函数编译成可以在没有 MATLAB 的 Linux 终端上运行的东西?

c++ - 链接到 visual studio 2013 boost

visual-studio - VS2010总是重建解决方案?

c++ - 我忘记了什么吗? (适用于 Windows 的双控制台缓冲区)

visual-studio - 如何在 Visual Studio 2015 上安装 .Net Core?

c# - 这是否处理了子对象?

c# - 使用 NUnit 进行测试时应该如何处理数据文件?

c# - Visual Studio 上的 Nuget 包推送 403 错误