Windows и Linux — две совершенно разные системы, поэтому часто бывает непросто переносить программы, написанные для одной системы, на другую, особенно когда речь идет о программах с графическим пользовательским интерфейсом. Несмотря на то, что существует множество различных кроссплатформенных библиотек и SDK, собственные программы, написанные без учета возможности переносимости, довольно сложно портировать.
Когда дело доходит до компиляции и запуска программ, написанных для Linux, в Windows, существует решение, известное как Cygwin. Проект Cygwin представляет собой набор наиболее распространенных инструментов и компиляторов (включая оболочку bash и цепочку компиляторов GNU) для Windows. Он также включает библиотеку, которая обеспечивает уровень совместимости, позволяющий компилировать программы, вызывающие API-интерфейсы, специфичные для Linux. Cygwin не является эмулятором или виртуальной машиной и не позволяет запускать двоичные файлы Linux в Windows без предварительной перекомпиляции.
Читайте также: Как использовать компилятор G++ в Linux
Перейдите на страницу Страница установки Cygwin и загрузите исполняемый файл установки для 32- или 64-разрядной версии (в зависимости от того, какой вариант Windows вы используете). Запустите программу установки. Нажмите «Далее» и еще раз «Далее» (к «Установить из Интернета»). Каталог по умолчанию — «C:\cygwin». При необходимости его можно изменить, но если у вас нет особой причины его менять, лучше всего использовать значение по умолчанию. Нажмите «Далее», «Далее» и еще раз «Далее».
Проект Cygwin имеет зеркальные сайты по всему миру; выберите тот, который, по вашему мнению, лучше всего соответствует вашему местоположению, и нажмите «Далее». Теперь вам нужно выбрать, какие пакеты устанавливать. Чтобы скомпилировать простые программы Linux в Windows, вам понадобится цепочка компиляторов GNU (GCC), которая предоставляет компилятор C и C++.
Введите «gcc» в поле поиска, а затем щелкните маленький знак плюса рядом с «Devel» в списке пакетов. Найдите «gcc-core» и «gcc-g++» и нажмите «Пропустить» для каждого из них. Слово «Пропустить» изменится на номер версии и знак «Н/Д» в «Корзине?» столбец превратится в отмеченный флажок. Введите «make» в поле поиска и найдите «make» в разделе «Devel». Нажмите «Пропустить», чтобы отметить его для установки. Найдите «wget» и отметьте его для установки из «Интернета». Чтобы построить пример ниже, нам также понадобится «libiconv»; найдите его и отметьте для установки.
Нажмите «Далее». Затем установщик увидит, какие еще пакеты необходимо установить для разрешения любых зависимостей. Нажмите «Далее», чтобы принять рекомендации.
После того, как все пакеты будут загружены и установлены, выполните последние шаги, пока программа установки не завершится. Запустите «Терминал Cygwin», чтобы войти в Linux-подобную среду разработки. В терминале вы используете не команды Windows, такие как «dir», а команды оболочки, такие как «ls».
Чтобы продемонстрировать, как скомпилировать программу Linux под Windows, мы будем использовать HTML-XML-пакет из пакета W3. Чтобы узнать, на что он способен, см. Как манипулировать файлами HTML и XML из командной строки .
Загрузите исходные файлы с помощью «wget»:
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
Исходные файлы теперь находятся в каталоге «html-xml-utils-6.7». Введите этот каталог:
cd html-xml-utils-6.7
Прежде чем файлы можно будет собрать, вам необходимо запустить сценарий оболочки «configure», чтобы сгенерировать Makefile (инструкции сборки), подходящие для этой среды сборки. Это обычный шаг в Linux (и Cygwin) при сборке пакетов из исходного кода.
./configure
После завершения настройки вы можете начать сборку с помощью команды make:
make
Сборка завершится неудачно. Я колебался, что делать дальше. Либо я мог переключиться на другой проект и собрать его из исходного кода, либо продолжить борьбу с утилитами HTML-XML. Я выбрал последнее, поскольку оно показывает, что не все будет легко при попытке скомпилировать программы Linux под Cygwin. Решение этой конкретной проблемы простое. Сообщение об ошибке показывает, что компоновщик не может найти библиотеку «icon». Беглый просмотр команды link показывает, что библиотека не указана. Быстрое и грязное решение — запустить команду вручную и указать компоновщику использовать libconv. «Правильный» способ исправить это — начать копаться в Makefile и т. д., чтобы выяснить, почему он не работает.
Выполните следующую команду, обратив внимание на включение «-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
После создания файла «hxindex.exe» вы можете продолжить сборку, снова набрав «make». Способ работы команды make заключается в том, что она проверяет, что было собрано, а что нет, а затем продолжает процесс сборки в соответствующей точке. Поскольку мы вручную собрали «hxindex.exe», «make» просто продолжает работу со следующим двоичным файлом в своем списке.
После завершения команды make все файлы.exe будут находиться в каталоге html-xml-utils-6.7.
Если вы застряли в использовании Cygwin, вам следует посмотреть на Часто задаваемые вопросы и на документация . В противном случае в проекте будет набор списки рассылки . Если у вас возникли проблемы с выполнением описанных выше шагов, воспользуйтесь разделом комментариев ниже.