Компиляция Linux-программ под Windows с помощью Cygwin
Что такое Cygwin
Cygwin — это набор Unix-подобных инструментов и библиотек для Windows, включающий bash и GNU Compiler Collection (GCC). Он не эмулирует Linux и не запускает Linux-бинарники напрямую: исходный код нужно перекомпилировать под Cygwin.
Короткое определение: совместимая библиотека для Windows, обеспечивающая POSIX-подобный слой и пакеты GNU.
Когда это имеет смысл
- Нужно собрать утилиты или серверы, изначально ориентированные на Linux, и вы не хотите развертывать виртуальную машину.
- Требуется использовать инструменты командной строки (bash, awk, sed, make) в Windows.
Важно: для сложных приложений с тяжёлой зависимостью от ядра Linux лучше использовать контейнеры, WSL или виртуальные машины.
Быстрая инструкция по установке Cygwin
- Перейдите на страницу установки Cygwin и скачайте setup.exe для 32‑ или 64‑битной Windows. Выберите вариант в соответствии с вашей системой.
- Запустите setup.exe и выберите «Install from Internet». По умолчанию каталог установки — C:\cygwin. Рекомендуется оставить его, если нет особой причины изменить.
- Выберите зеркала (mirror) поближе к вам и продолжите.
- На этапе выбора пакетов найдите и отметьте для установки следующие пакеты: gcc-core, gcc-g++, make, wget и libiconv.

- Установщик автоматически подтянет зависимости, затем завершите установку и запустите Cygwin Terminal.
Примечание: в терминале Cygwin используются Unix-команды (ls, cp, grep), а не команды Windows (dir и т.д.).
Выбор пакетов: что нужно и почему
- gcc-core — компилятор C
- gcc-g++ — компилятор C++
- make — система сборки
- wget — загрузка исходников по HTTP/FTP
- libiconv — библиотека для конвертации кодировок (часто требуется при сборке)
Совет: если пакет изначально помечен как Skip, кликните по нему, чтобы установить выбранную версию — слово Skip сменится на номер версии и флажок в колонке Bin? станет активным.
Пример: сборка пакета html-xml-utils из исходников
Для примера используем пакет HTML-XML-utils с сайта W3C.
Скачивание архива:
wget http://www.w3.org/Tools/HTML-XML-utils/html-xml-utils-6.7.tar.gzРаспаковка:
tar-zxf html-xml-utils-6.7.tar.gzПерейдите в каталог исходников:
cd html-xml-utils-6.7Сначала запустите скрипт configure, который сгенерирует Makefile, подходящий для вашей среды сборки:
./configure
После успешного configure запускайте сборку:
makeЕсли сборка прерывается — пример исправления ошибки линковки
Иногда сборка падёт из‑за отсутствия ссылки на библиотеку при линковке. В моём примере сборка остановилась потому, что линковщик не видел libiconv. Вместо правки Makefile быстрым временным решением было вручную собрать проблемный бинарник, добавив флаг -liconv.
Команда, которая решила проблему (обратите внимание на -liconv в конце):
gcc-g-O2-o hxindex.exe hxindex.o scan.o html.o openurl.o url.o heap.o class.o errexit.o connectsock.o types.o tree.o genid.o dtd.o headers.o dict.o fopencookie.o -liconvПосле успешной ручной сборки одного из исполняемых файлов запустите make снова — make пропустит уже собранные файлы и продолжит сборку с места остановки.

Важно: это «быстрое» решение. Правильный путь — выяснить, почему Makefile не добавляет -liconv, и поправить конфигурационные скрипты или настройки пакета.
Типичные причины сбоев и способы устранения
- Отсутствует пакет в Cygwin: установите нужный пакет через setup.exe.
- Библиотека есть, но линковщик её не видит: проверьте опции LDFLAGS и LIBS в среде сборки или в Makefile; временно используйте ручную команду с -l.
- Неподдерживаемые системные вызовы: код зависит от специфичных для Linux API; подумайте о патчах или использовании WSL/VM.
- Различия в путях и кодировках: будьте внимательны к /cygdrive/ и кодировкам файлов; libiconv поможет с кодировками.
Чек‑лист для разработчика перед сборкой
- Установлены gcc, g++, make, wget
- Установлена libiconv (если пакет работает с кодировками)
- Запущен ./configure без критических ошибок
- У вас есть доступ в интернет для загрузки зависимостей
- У вас есть права записи в каталог сборки
Мини‑методология: как последовательно решать проблемы сборки
- Внимательно читайте вывод ./configure и make — там часто есть подсказки о недостающих пакетах.
- Проверяйте, какие библиотеки запрашивает линковщик (ld) — ищите строки вида undefined reference или cannot find -l
. - Убедитесь, что соответствующие dev‑пакеты (с заголовками .h и .a/.so) установлены.
- Если быстро нужно собрать — соберите проблемный бинарник вручную с нужными флагами; затем продолжите make.
- Для долгосрочного решения правьте configure.ac / Makefile.am / Makefile.in и пересоберите.
Критерии приёмки
- Программа собирается полностью командой make без ручных вмешательств.
- Все тесты или основные сценарии запуска проходят в Cygwin‑среде.
- Нет утечек ресурсов или зависаний, связанных с несовместимыми системными вызовами.
Роль‑ориентированный чек‑лист
- Разработчик: убедиться, что код компилируется с gcc/g++ и не использует Linux‑специфичные системные вызовы.
- Инженер сборки: настроить CI, который покрывает сборку в Cygwin (опционально) или в WSL для сравнения.
- Системный администратор: установить и обновлять Cygwin‑пакеты на целевых машинах.
Когда Cygwin не лучший выбор — альтернативы
- WSL (Windows Subsystem for Linux): предлагает более полную совместимость с Linux и запускает реальные Linux‑бинарники без перекомпиляции.
- Виртуальная машина (VirtualBox, VMware): максимально близко к Linux‑среде, полезна для сложных систем.
- Контейнеры (Docker Desktop + WSL2): подходят для серверных приложений и микросервисов.
Советы по отладке и диагностике
- Используйте strace (если доступен) для отслеживания системных вызовов.
- Сравнивайте конфигурацию вашего окружения с Linux‑системой: переменные окружения, версии библиотек, флаги компиляции.
- Если библиотека присутствует, но не линкуется, проверьте порядок флагов: некоторые линковщики требуют, чтобы -lXXX стоял после объектов, которые её используют.
Факто‑бокс
- Cygwin даёт POSIX‑совместимость в Windows через библиотеку cygwin1.dll.
- Cygwin не исполняет ELF‑бинарники Linux; требуется перекомпиляция под Windows.
Краткий глоссарий
- configure — скрипт, генерирующий Makefile под текущую систему.
- make — инструмент, выполняющий сборку по правилам Makefile.
- libiconv — библиотека конвертации кодировок; часто требуется при сборке утилит, работающих с текстом.
Примерный план действий при проблемах (runbook)
- Перечитать ошибки ./configure и make. 2. Установить недостающие пакеты через setup.exe. 3. Попробовать собрать вручную проблемный бинарник с недостающими флагами. 4. Исправить Makefile/configure для постоянного решения. 5. Документировать патч и добавить в систему сборки.
Совместимость и миграция
- Для лучших результатов тестируйте сборку как в Cygwin, так и в WSL, чтобы оценить различия.
- Если проект активно развивается и привязан к Linux, рассмотрите перенос сборки в WSL/CI вместо постоянных правок под Cygwin.
Короткое объявление (100–200 слов)
Хотите собирать Linux‑утилиты прямо в Windows? Cygwin предоставляет знакомую Unix‑среду и GNU‑инструменты, позволяющие компилировать пакеты из исходников. Установите gcc/g++/make/wget и libiconv через установщик Cygwin, запустите ./configure и make. Встречаются случаи, когда нужно вручную добавить флаги линковщика (например, -liconv) — это временное решение, но оно позволяет продолжить сборку. Для сложных или критичных проектов подумайте о WSL или виртуальной машине как более надёжной альтернативе.
Социальный превью
OG-заголовок: Компиляция Linux‑программ в Windows с Cygwin OG-описание: Установка, сборка и устранение ошибок при переносе Linux‑пакетов в Windows с помощью Cygwin.
Итог
Cygwin — удобный и часто достаточный инструмент, если нужно быстро собрать Linux‑утилиту в Windows без развёртывания полноценной виртуальной машины. Для проектов с глубокой интеграцией в Linux стоит рассмотреть WSL или VM.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента