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