Windowsには「システム全体のlibc」は実際にはありません。
*nix では、一般に 1 つのコンパイラ、1 つのリンカ、および明確に定義されたオブジェクト ファイル形式、呼び出し規約、および名前マングリング仕様があります。これは通常、OS に付属しています。コンパイラの半特別なステータス (さらに、さまざまな *nix 間の移植性に重点が置かれている) は、特定のものがあることが期待され、プログラムが簡単に見つけて使用できるように名前付けおよび/またはバージョン付けされることを意味します。
Windows では、物事はより断片化されています。コンパイラは OS に付属していないため、各自で入手する必要があります。各コンパイラは独自の CRT を提供します。これには、MSVCRT と同じ機能がある場合とない場合があります。また、呼び出し規則やライブラリでの名前の表示方法に関する 1 つの真の仕様も存在しないため、コンパイラが異なれば (処理方法も異なります)、ライブラリ内の関数を見つけるのに問題が生じる可能性があります。
ところで、ここでは名前が手がかりになるはずです。MSVCRT は「MicroSoft Visual C++ RunTime」の略です。それは実際には、たとえば、同じように「システム全体」のライブラリではありませんkernel32
.MSのコンパイラが使用するランタイムライブラリであり、Windowsを構築するときに使用されたと思われます. 他のコンパイラはおそらくそれに対してリンクする可能性がありますが、(1) ライセンスの問題がある可能性があります。(2) コンパイラは自分たちのコードを MS のコードに結び付けます。つまり、(2a) ランタイムに追加したり、バグを修正したりする方法がなくなり、MS が修正してくれることを期待する以外にはありません。(2b) MS が RTL の内容を変更することを決定した場合 (これは自由に行うことができ、おそらく VC++ の新しいバージョンごとに行われます)、または名前の表示方法を変更すると、それらの他のプログラムが壊れる可能性があります。