В Windows нет "общесистемного libc".
В * nix, как правило, есть один компилятор, один компоновщик, а вместе с ними четко определенный формат объектного файла, соглашение о вызовах и спецификация обработки имен. Этот материал обычно поставляется с ОС. Полуспециальный статус компилятора (плюс акцент на переносимость между различными * никсами) означает, что определенные вещи могут быть ожидаемыми , и быть названными и / или версиями таким образом, чтобы программы могли найти и использовать его.
В Windows все более фрагментировано. Компилятор не поставляется с ОС, поэтому люди должны получить свои собственные. Каждый компилятор предоставляет свой собственный CRT, который может иметь или не иметь те же функции, что и MSVCRT. Также нет единой истинной спецификации в отношении соглашений о вызовах или того, как имена должны отображаться в библиотеках, поэтому у разных компиляторов (с разными способами работы) могут возникнуть проблемы с поиском функций в библиотеке.
Кстати, имя должно быть подсказкой; MSVCRT - это сокращение от «MicroSoft Visual C ++ RunTime». На самом деле это не «общесистемная» библиотека, как, скажем, kernel32
- это просто библиотека времени выполнения, используемая компиляторами MS, которую они предположительно использовали при сборке Windows. Другие компиляторы могут ссылаться на него, но (1) могут возникнуть проблемы с лицензированием; и (2) компиляторы будут привязывать свой код к MS - это означает (2a), что у них больше не будет возможности добавлять время выполнения или исправлять ошибки, если не считать, что MS исправит их; и (2b) если MS решит изменить то, что находится в RTL (что они могут делать по своему желанию и, возможно, в каждой новой версии VC ++), или как будут выглядеть имена, эти другие программы могут сломаться.