Хобрук: Ваш путь к мастерству в программировании

Запуск приложения, скомпилированного в cygwin, без установленного cygwin

Скажем, у меня есть приложение, которое я скомпилировал под cygwin, и я хочу распространять это приложение без необходимости установки cygwin пользователем. Достаточно ли упаковать исполняемый файл и библиотеку cygwin?

30.12.2009

  • Библиотека cygwin под лицензией GPL, поэтому вам также придется распространять исходный код вашего приложения. 30.12.2009
  • Но вы можете купить коммерческую лицензию на Cygwin. 30.12.2009
  • Пожалуйста, уточните - потому что, похоже, в ответах есть два типа интерпретации. Вы имеете в виду это технически (какие другие файлы мне нужно распространять) или юридически (что позволяет мне делать лицензия)? 06.01.2010

Ответы:


1

Времена изменились. Библиотеки Cygwin теперь находятся под лицензией Lesser GPL (v3), что позволяет объединять их с приложениями, подпадающими под широкий диапазон лицензий, от FOSS до проприетарных.

Мешает то, что эмуляция POSIX в Cygwin заходит слишком далеко с точки зрения собственных приложений Windows.

Именно здесь вступает в силу мой проект Cygnal. Cygnal - это аббревиатура от CYGwin Native Application Library: это вспомогательная совместимый форк Cygwin, который изменяет, а в некоторых случаях просто перенастраивает поведение определенных функций в соответствии с собственными соглашениями платформы Windows.

Базовая программа Cygwin "Hello, World" требует двух библиотек. Среда выполнения GCC под названием cyggcc_s-1.dll и Cygwin DLL cygwin1.dll. Проект Cygnal предоставляет замену последнему. (Для загрузки доступна 32-битная сборка).

Одна вопиющая область несовместимости между представлением мира Cygwin POSIX и Windows - это обработка путей. Cygwin представляет файловую систему через поддельный корневой каталог / и его собственную внутреннюю «таблицу монтирования», которая предоставляет такие места, как /cygdrive, /proc и /dev. Cygnal покончил со всем этим. Пути - это пути Win32. Текущий рабочий каталог ведет себя так же, как текущий рабочий каталог Windows. Диски связаны с текущими каталогами, а относительные пути дисков, такие как D:foo.txt, работают в Cygnal. В Cygnal по-прежнему доступны /dev и /proc: к ним обращаются как к специальным префиксам dev:/ и proc:/. Не разрешается chdir в них: это не было бы родным! В Cygnal, если вы с chdir по D:\wherever, то ваш текущий диск - это D диск, а пути /foo или \foo относятся к D:\foo. Главный корневой каталог POSIX Cygwin отсутствует.

Тем не менее, с Cygnal вы можете продолжать использовать функциональность POSIX, что позволяет разрабатывать кроссплатформенные программы, которые имеют меньше кода, переключаемого в зависимости от платформы, по сравнению с поддержкой порта с использованием MinGW или Microsoft Visual C / C ++.

Например: вы можете написать консольное приложение Win32, используя коды VT100 и termios. Тот же код будет работать в Unix. Нет необходимости использовать консольный API Win32 в Windows и VT100 / termios в системе POSIX.

Другой пример: для многопоточности вы можете просто использовать потоки POSIX. pthread_create, чтобы запустить поток, pthread_mutex_lock, чтобы заблокировать мьютекс и так далее. Вашей программе не нужна абстракция переносимости для потоков, которая переводится в Win32 или POSIX; вы просто используете POSIX и все.

Функция uname в Cygnal сообщает sysname с префиксом CYGNAL, а не CYGWIN. Благодаря этому ваша программа может сказать, что она работает на Cygnal, а не Cygwin (или любой другой платформе POSIX). Таким образом, вы можете внести любые необходимые изменения: например, если вашей программе требуется /dev/null, на Cygnal она может вместо этого искать dev:/null.

20.07.2016

2

Действительно ли вашему приложению нужна эмуляция Posix, предоставляемая Cygwin? Если нет, вы можете скомпилировать его с флагом -mno-cygwin, и он вообще не будет зависеть от cygwin, но будет собственным приложением Windows. Часто для настройки и сборки приложения вам нужна только настоящая оболочка (bash), но на самом деле вам не нужны функции Posix Cygwin.

Другой альтернативой является MSYS + MinGW, который представляет собой легкий форк Cygwin. Это обеспечивает среду компиляции, которая по умолчанию создает собственные приложения для Windows.

Третий вариант - использовать компиляторы MinGW из самого Cygwin. Они должны быть доступны через обычный менеджер пакетов Cygwin. Затем вы должны настроить проект для кросс-компиляции с использованием компиляторов MinGW.

30.12.2009
  • MSYS - это не ответвление cygwin. 30.12.2009
  • mingw.org/history en.wikipedia.org/wiki/MinGW#Comparison_with_Cygwin Кроме того, основные участники списка рассылки MinGW часто говорят, что MinGW / MSYS - это ответвление cygwin. 30.12.2009
  • Хорошо, я думаю, вы здесь педантичны; тем не менее, я отредактировал свой пост, чтобы избежать этой проблемы. Тем не менее, msys-1.0.dll будет функциональным эквивалентом cygwin.dll, да? MinGW - это скорее компиляторы и другие инструменты, которые можно использовать вне оболочки bash, в то время как msys предоставляет оболочку bash и (ограниченную) эмуляцию posix. 31.12.2009

  • 3

    Обычно да. Не забудьте установить Cygwin DLL в общедоступном месте (Windows \ System32), эта DLL ведет себя очень плохо, когда несколько ее версий загружаются на один и тот же компьютер.

    30.12.2009
  • Связывание GPL и производные работы 30.12.2009
  • В вопросе ничего не говорилось о том, что автор не выпускает код. Многие утилиты включают в себя cygwin1.dll. Одним из таких примеров является cntml: cntlm.sourceforge.net. 06.01.2010

  • 4

    Вы можете попробовать скомпилировать все как статичное. Это должно позволить вам запускать все без использования библиотек (поскольку они уже находятся в вашем двоичном файле). Но это также будет означать, что он может работать не на всех платформах, если cygwin потребуется другая или более новая dll.

    30.12.2009
  • Это не сработает: stackoverflow .com / questions / 340696 / 24.07.2013
  • Новые материалы

    Как симулировать серию пенальти на Python с помощью симуляции Монте-Карло, часть 1: генерация функций
    Серия пенальти была огромным испытанием во время чемпионата мира по футболу. Они вызвали много споров в социальных сетях и новостных агентствах. Даже финальный матч турнира решался по..

    AST для разработчиков JavaScript
    TL; DR Эта статья - мое выступление на недавно состоявшейся конференции Stockholm ReactJS Meetup. Вы можете посмотреть слайды здесь..

    5 проектов на Python, которые нужно создать прямо сейчас!
    Добро пожаловать! Python — один из моих любимых языков программирования. Если вы новичок в этом языке, перейдите по ссылке ниже, чтобы узнать о нем больше:

    Dall-E 2: недавние исследования показывают недостатки в искусстве, созданном искусственным интеллектом
    DALL-E 2 — это всеобщее внимание в индустрии искусственного интеллекта. Люди в списке ожидания пытаются заполучить продукт. Что это означает для развития креативной индустрии? О применении ИИ в..

    «Очень простой» эволюционный подход к обучению с подкреплением
    В прошлом семестре я посетил лекцию по обучению с подкреплением (RL) в моем университете. Честно говоря, я присоединился к нему официально, но я редко ходил на лекции, потому что в целом я нахожу..

    Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
    Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

    Фишинг — Упаковано и зашифровано
    Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..