Windows 中并没有真正的“系统范围的 libc”。
在 *nix 中,通常有一个编译器、一个链接器,以及定义良好的目标文件格式、调用约定和名称修饰规范。这些东西通常随操作系统一起提供。编译器的半特殊状态(加上强调跨不同 *nixes 的可移植性)意味着可以预期某些东西在那里,并且以程序可以轻松找到和使用它的方式命名和/或版本化。
In Windows, things are more fragmented. A compiler doesn't come with the OS, so people need to get their own. Each compiler provides its own CRT, which may or may not have the same functions in it as MSVCRT. There's also no One True Spec on calling conventions or how names should appear in the libraries, so different compilers (with different ways of doing stuff) might have trouble finding functions in the library.
BTW, the name should be a clue here; MSVCRT is short for "MicroSoft Visual C++ RunTime". It's not really a "system-wide" library in the same way that, say, kernel32
is -- it's just the runtime library used by MS's compilers, which they presumably used when building Windows. Other compilers could conceivably link against it, but (1) there might be licensing issues; and (2) the compilers would be tying their code to MS's -- meaning (2a) they'd no longer have any way to add to the runtime or fix bugs, short of hoping MS will fix them; and (2b) if MS decides to change what's in the RTL (which they can do at will, and probably have in each new version of VC++), or how the names appear, those other programs might break.