Немного прорабатывая ответы от caf и jartieda ...
Cygwin - это попытка подражать (почти)полная среда выполнения POSIX в собственном процессе Windows.Это достаточно полно, что удивительный объем кода приложения Unix просто компилируется и запускается с использованием знакомой идиомы ./configure && make && make install
.Этот трюк был сделан путем предоставления библиотеки DLL, которая эмулирует системные вызовы POSIX с помощью Windows API.Исходя из этого, вы получаете полный набор инструментов GCC, bash и все обычные утилиты командной строки, к которым вы привыкли.Недостатком является то, что скомпилированная программа зависит от библиотеки Cygwin DLL, что затрудняет доставку результата в систему, в которой еще не установлен Cygwin и пользователь которой не хочет использовать оболочку Unix.
MinGW - это порт цепочки инструментов GCC, который генерирует собственные приложения Windows, которые зависят от хорошо известной (и распространяемой вместе с Windows) библиотеки времени выполнения MSVCRT.DLL C.Он не пытается эмулировать операционную систему POSIX, но приложения, которые в основном основаны на стандартных библиотеках C, часто создаются практически без изменений.
MSYS - это среда времени компиляции, которая обеспечиваетдостаточно утилит Unix (включая bash), чтобы часто запускать ./configure
, и, если проект поддерживает результаты, завершите сборку с GCC MinGW.В результате получается собственный исполняемый файл Windows, который не зависит от каких-либо библиотек DLL, которые вы намеренно не используете, кроме MSVCRT.DLL.Хотя сама среда MSYS была ответвлением ранней версии проекта Cygwin, она в первую очередь предназначена для предоставления Unix-подобного места для компиляции собственных приложений Windows: обычно , а не создает новые приложения.основанный на его среде выполнения.
Другой подход к компиляции для Windows заключается в использовании кросс-компилятора MinGW на Linux.Так работают многие разработчики ядра MinGW, тестируя свои продукты либо под Wine, либо под Windows, работающей на виртуальной машине или на отдельном ПК.
Если в программе есть компонент с графическим интерфейсом, у вас могут возникнуть дополнительные трудности.Некоторые рамки GUI доступны как для Linux, так и для Windows. Qt , wxWidgets и IUP все приходят на ум, но есть и другие.
Редактировать: Я улучшил приведенный выше параграф о MSYS, чтобы подчеркнуть, что он предназначен для среды компиляции для создания программ, которые запускаются как собственные приложения Windows, а не как полноценная среда POSIX, такая как Cygwin.
Обратите внимание, также, что всегда есть возможность портировать проект на один из более традиционных компиляторов для разработки Windows.Open Watcom, компиляторы Borland и Microsoft имеют бесплатные или недорогие версии, хотя зачастую и не под лицензиями, которые делают сообщество open source полностью счастливым.
Этот подход, вероятно, требует больше усилий, потому что различия между средой Linux и средой Windows становятся более заметными, когда вы также переключаетесь с одного набора инструментов на другой.Это особенно верно в отношении компиляторов Microsoft, которые исторически не так полностью соответствуют стандартам, как GCC.