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

C++ 为什么即使我只使用os api,msvcrt.dll也会自动链接?,c++,visual-studio,C++,Visual Studio,我正在使用vs2010,每当我构建任何windows应用程序(不使用mfc或标准库-仅使用原始api)时,msvcrt.dll都会链接到它。有很多应用程序是在vs上编译的,但没有这种依赖性 如何从我的应用程序中删除MSVCR.DLL依赖项。 < P>这是C运行库,不能在没有运行时构建C++程序。 对于Visual Studio 2010,您实际上应该链接msvcr100.dll,因为这是该版本编译器的MSVC运行时。普通的旧msvcrt.dll是MSVC6运行时,现在作为Windows系统组件提

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


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

< P>这是C运行库,不能在没有运行时构建C++程序。 对于Visual Studio 2010,您实际上应该链接msvcr100.dll,因为这是该版本编译器的MSVC运行时。普通的旧msvcrt.dll是MSVC6运行时,现在作为Windows系统组件提供。如果可执行文件链接到msvcrt.dll,则必须链接到其他链接到msvcrt.dll的文件,因为VS2010中的任何内容都不会依赖于MSVC6运行时


您可以通过使用删除对msvcr100.dll的依赖关系,但选择该选项有其优点和缺点。如果使用静态链接,那么您可以将应用程序作为单个可执行文件分发。如果使用动态链接,则必须在每个目标计算机上安装运行时。使用某些第三方库将迫使您使用动态链接,以便运行时可以在可执行文件和第三方库之间共享。

谢谢回答……但是您的答案为我提出了更多的问题……1)每个编译器都有与C和C++编译器关联的运行时吗?总有一些描述的运行库。运行库是操作系统和语言本身之间的粘合剂。如果没有其他原因提供new()和delete()操作符(但是还有许多其他类似的东西必须由CRT提供)。