Я не разработчик C ++, но меня всегда интересовали компиляторы, и я заинтересован в том, чтобы поработать с некоторыми элементами GCC (в частности, с LLVM).
В Windows для правильной работы GCC требуется слой эмуляции POSIX (cygwin или MinGW).
Почему это?
Я использую множество других программ, написанных на C ++ и кросс-компилированных для разных платформ (Subversion, Firefox, Apache, MySQL), и ни одна из них не требует Cygwin или MinGW.
Насколько я понимаю, наилучшее программирование на C ++ заключается в том, что вы можете написать достаточно независимый от платформы код и справиться со всеми различиями в процессе компиляции.
Так в чем же дело с GCC? Почему он не может работать в Windows?
EDIT:
Хорошо, два ответа пока говорят, в основном, "GCC использует слой posix, потому что он использует заголовки posix".
Но это на самом деле не отвечает на вопрос.
Допустим, у меня уже есть набор заголовков для моей любимой стандартной библиотеки. Зачем мне все еще нужны заголовки posix?
Требует ли GCC cygwin / mingw для фактического RUN ?
Или ему нужен только слой эмуляции для заголовков и библиотек? Если так, то почему я не могу просто дать ему каталог "lib" с необходимыми ресурсами?
ИЗМЕНИТЬ СНОВА:
Хорошо, я попробую еще раз уточнить вопрос ...
Я также пишу код на языке программирования D . Официальный компилятор называется «dmd», и существуют официальные двоичные файлы компилятора для Windows и Linux.
Версия Windows не требует никакой эмуляции POSIX. И версия для Linux не требует какой-либо эмуляции Win32. Если у компилятора есть предположения относительно его среды, он довольно хорошо скрывает эти предположения.
Конечно, я должен указать компилятору, где найти стандартную библиотеку и где найти библиотеки для статической или динамической связи.
GCC, напротив, настаивает на том, чтобы притворяться, что он работает в среде posix, и просит ME утешить эти предположения, настроив слой эмуляции.
Но что именно в GCC зависит от этого уровня? Он просто ищет заголовки stdlib и предполагает, что он найдет эти заголовки в / usr / lib? *
Если это так, разве я не могу просто попросить его заглянуть в "C: / gcc / lib", чтобы найти эти заголовочные файлы?
Или GCC сам использует библиотеки POSIX для доступа к файловой системе (и для других низкоуровневых операций)? Если это так, то мне интересно, почему они не просто статически связывают свои любимые библиотеки Windows POSIX. Зачем требовать от пользователя установки зависимостей, если они могут встроить эти зависимости прямо в приложение?