Гид по технологиям

Компиляция Linux-программ под Windows с помощью Cygwin

• 6 min read • Инструменты • Обновлено 20 Nov 2025
Сборка Linux‑программ в Windows через Cygwin
Сборка 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

  1. Перейдите на страницу установки Cygwin и скачайте setup.exe для 32‑ или 64‑битной Windows. Выберите вариант в соответствии с вашей системой.
  2. Запустите setup.exe и выберите «Install from Internet». По умолчанию каталог установки — C:\cygwin. Рекомендуется оставить его, если нет особой причины изменить.
  3. Выберите зеркала (mirror) поближе к вам и продолжите.
  4. На этапе выбора пакетов найдите и отметьте для установки следующие пакеты: gcc-core, gcc-g++, make, wget и libiconv.

Окно выбора пакетов Cygwin с выделенными gcc и make

  1. Установщик автоматически подтянет зависимости, затем завершите установку и запустите 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 в Cygwin для html-xml-utils

После успешного 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 пропустит уже собранные файлы и продолжит сборку с места остановки.

Ошибка сборки и сообщение линковщика о недостающей библиотеке iconv

Важно: это «быстрое» решение. Правильный путь — выяснить, почему Makefile не добавляет -liconv, и поправить конфигурационные скрипты или настройки пакета.

Типичные причины сбоев и способы устранения

  • Отсутствует пакет в Cygwin: установите нужный пакет через setup.exe.
  • Библиотека есть, но линковщик её не видит: проверьте опции LDFLAGS и LIBS в среде сборки или в Makefile; временно используйте ручную команду с -l.
  • Неподдерживаемые системные вызовы: код зависит от специфичных для Linux API; подумайте о патчах или использовании WSL/VM.
  • Различия в путях и кодировках: будьте внимательны к /cygdrive/ и кодировкам файлов; libiconv поможет с кодировками.

Чек‑лист для разработчика перед сборкой

  • Установлены gcc, g++, make, wget
  • Установлена libiconv (если пакет работает с кодировками)
  • Запущен ./configure без критических ошибок
  • У вас есть доступ в интернет для загрузки зависимостей
  • У вас есть права записи в каталог сборки

Мини‑методология: как последовательно решать проблемы сборки

  1. Внимательно читайте вывод ./configure и make — там часто есть подсказки о недостающих пакетах.
  2. Проверяйте, какие библиотеки запрашивает линковщик (ld) — ищите строки вида undefined reference или cannot find -l.
  3. Убедитесь, что соответствующие dev‑пакеты (с заголовками .h и .a/.so) установлены.
  4. Если быстро нужно собрать — соберите проблемный бинарник вручную с нужными флагами; затем продолжите make.
  5. Для долгосрочного решения правьте 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)

  1. Перечитать ошибки ./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.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро