Я экспериментировал с Cygwin, пытающимся получить «голую» минимальную установку. Я считаю, что установка таких утилит, как grep, gawk, sed и аналогичных инструментов, зависит от cygwin, base-Cygwin и иногда от нежелательных инструментов, таких как bash, coreutils и т.д. Я не пытался полностью понять, почему существует такая зависимость, но это не моя Цель. Я хотел установить только инструменты и их необходимые библиотеки и начал изучать пакет Cygwin. Я обнаружил, что не использовать setup.exe, поставляемый Cygwin, - это альтернативный способ выполнить минимальную установку Cygwin. И вот как я это сделал.
- Используйте setup.exe, поставляемый Cygwin, чтобы загрузить все пакеты - только загрузка и без установки.
- После успешного завершения загрузки отдельные пакеты, такие как zlib, gawk, grep, libiconv, находятся в каталоге x86/release или x86_64/release.
- Каждый пакет 'tar'red и сжат с помощью инструмента' xz 'или bzip и хранится в соответствующих каталогах.
Чтобы установить конкретный инструмент, такой как sed или gawk, все, что нужно сделать, - это извлечь исполняемый файл инструмента и его зависимости (.dll).
Прежде чем пытаться выполнить следующее, убедитесь, что у вас есть такой инструмент, как 7z.exe, xz.exe, bzip2 или другой, способный распаковать архив .xz или bzip.
Пример установки gawk ниже:
- Извлеките gawk.exe из архива gawk-4.1.3-1.tar.xz с помощью команды - 7z.exe e -so gawk-4.1.3-1.tar.xz | tar xvf -
- Как только это будет сделано, вы должны найти gawk.exe в подпапке обычно, usr/bin в папке release/gawk
- Найдите зависимости для gawk - вы можете сделать это несколькими способами.
Изучите файл Cygwin setup.ini, находящийся в папке x86 или x86_64. Найдите строку «@ gawk», и в строках после этой строки вы найдете строку «require:», в которой перечислены зависимости.
Мой читает так: «Требуется: bash cygwin libgmp10 libintl8 libmpfr4 libreadline7»
Для запуска gawk bash не обязателен, так как у нас есть командная оболочка windows. (bash включен, чтобы получить несколько других dll, требуемых gawk. Тем не менее, это приводит к установке гораздо большего количества ненужных файлов). Другие зависимости содержат файлы, необходимые gawk для запуска. Извлеките каждый из вышеперечисленных пакетов, используя такие инструменты, как 7z или xz, в отдельные файлы.
После того, как все зависимости извлечены, скопируйте необходимый инструмент (ы) (grep/sed/gawk) в папку и все зависимые .dll. Теперь вы сможете запускать свой инструмент с минимальным набором .dll, необходимым в чистом виде. установка Cygwin.
Предупреждение: может быть недостаточно просто извлечь зависимости, перечисленные в setup.ini для каждого инструмента. Иногда вам может понадобиться запустить / запустить инструмент, чтобы обнаружить, что требуется больше dll.
Существуют и другие способы поиска dll-файлов, требуемых exe-файлом - вы можете использовать dumpbin от MS или средство обхода зависимостей, ndepends или аналогичные инструменты, чтобы найти список зависимых dll
Консультируйтесь - https://stackoverflow.com/questions/362560/how-do-i-detect-the-dlls-required-by-an-application https://stackoverflow.com/questions/475148/how-do-i -find-из-каких библиотек DLL-ан-исполняемая воля нагрузка
Я также грубо форсировал зависимую информацию о dll, просто запустив инструмент и установив отсутствующие dll, перечисленные один за другим, извлекая из необходимых пакетов.
Когда вы запускаете exe-файл и выдает ошибку с отсутствующим сообщением .dll, ищите пакет, который содержит dll здесь - https://cygwin.com/cgi-bin2/package-grep.cgi . Введите полное / частичное имя отсутствующей dll, чтобы найти имя пакета, содержащего dll.
В конце концов, у меня была чистая установка Cygwin с только теми инструментами и библиотеками, которые мне нужны. Пример: gawk - gawk.exe и следующие dll - cygwin1.dll, cyggmp-10.dll, cygiconv-2.dll, cygintl-8.dll, cygmpfr-4.dll, cyggcc_s-seh-1.dll, cygncursesw- 10.dll, cygreadline7.dll
sed - sed.exe и dlls - cygwin1.dll, cygintl-8.dll
Надеюсь, что это будет полезно. Установщик Cywin также делает перебазирование DLL, что я не буду здесь углубляться