C/C++运行时从何而来
Where does C/C++ runtime come from?
我最近读到windows中的C/C++运行时有两部分。一个是VC运行时,另一个是通用C运行时。根据我的阅读,通用C运行时是操作系统的一部分。
问题1:那么它是否默认随操作系统安装而来?或者通用C运行时是否对Windows SDK做了一些事情,即Windows SDK安装提供了UCRT?
问题2:如果UCRT是操作系统的一部分,那么是什么提供了VC Runtime?
此外,我读到平台工具集提供编译器、链接器和标准库。
问题3:所以平台工具集与C/C++运行时(分为两部分(无关?我们可以说平台工具集和C/C++运行时在windows操作系统上不是一个单一的单元吗?
请澄清。
通用C运行时随Windows 10上的操作系统提供(在安装操作系统时安装(。在较旧的Windows版本(Vista到8.1(上,它是通过Windows Update分发的。它也可以与您的应用程序一起在本地部署。
如果你的应用程序支持Windows 10以上的操作系统,你需要考虑如何分发它。你可以在应用程序中包含它的副本(这是最常见的解决方案(,也可以要求安装Windows Update。
您可以在此处阅读更多信息:https://learn.microsoft.com/en-us/cpp/windows/universal-crt-deployment?view=vs-2019年
VC Runtime可以通过两种方式提供:通过Visual C++可再发行包安装程序,或者与应用程序一起本地部署。如果你的应用附带了一个安装程序,你可以让你的安装程序也安装VC Runtime包。如果您交付的软件没有安装,您将不得不将VC运行时DLL放在应用程序可执行文件旁边。您可以在此处阅读有关使用VC Runtime进行部署的更多信息:https://learn.microsoft.com/en-us/cpp/windows/redistributing-visual-cpp-files?view=vs-2019年
此外,我读到平台工具集提供编译器、链接器和标准库。
这并不完全正确。它提供了标准的C++库和运行时(也称为VC运行时(。标准C库和运行时来自通用C运行时。
"通用C运行时"充其量只是一个特殊的术语。
C编译器附带一个标准库,您可以将其链接到代码中。标准库提供了C标准所需的所有功能。这取决于库实现者来弄清楚如何实现它们。
操作系统提供对程序有用的服务:内存管理、文件系统、显示屏、键盘输入、鼠标等等。它有自己的接口,标准库中的代码会根据需要使用它。
不同的操作系统有不同的方式来提供这些服务,因此标准库必须针对不同操作系统以不同的方式编写。但对操作系统的调用不一定是用C编写的,这就是为什么"通用C运行时"并不合适的原因。例如,在MSDOS的旧时代,调用操作系统意味着在处理器寄存器中设置一些值,然后生成软件中断。这通常不是C代码,尽管一些运行库提供了代码层,这样您就可以在不必编写自己的汇编代码的情况下实现这一点。
- CMake-按正确顺序将项目与C运行时对象文件链接
- 我在c++代码中生成了一个运行时#3异常
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 删除指向指针的指针是运行时错误吗
- 如何用参数值调用函数(仅在运行时已知)
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- c++中的指针和运行时错误
- 在运行时处理类型擦除的数据-如何不重新发明轮子
- 有没有一种方法可以测量c++程序的运行时内存使用情况
- 建议在运行时将带有类实例的列表从c++导入qml
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐
- 在同一模拟中使用静脉和静脉_ inet内容时出现运行时错误
- 读取文件时运行时的未知行为
- 函数在Windows或Linux上运行时表现不同
- 在声明中合并两个常量"std::set"(不是在运行时)
- AWS Lambda C++运行时权限被拒绝
- 通过switch和static_cast访问多态对象的运行时类型
- 如何修复 Onnx运行时会话>运行问题?