我一直在尝试使用 Cygwin,试图获得一个“简单的”,最小的安装。我确实发现安装 grep、gawk、sed 和类似工具等实用程序依赖于 cygwin、base-Cygwin,有时还依赖于不需要的工具,如 bash、coreutils 等,
我只想安装工具及其所需的 dll 并开始检查 Cygwin 包。我发现不使用 Cygwin 提供的 setup.exe 是完成最小 Cygwin 安装的另一种方法。
我就是这样完成的。
- 仅从任何 Cygwin 镜像下载所需的包
使用 ftp 或 http 的站点。或者,您可以使用 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-4.1.3-1.tar.xz 存档中提取 gawk.exe - 7z.exe e -so gawk-4.1.3-1.tar.xz |焦油 xvf -
- 完成后,您应该可以在子文件夹中找到 gawk.exe,通常是 release/gawk 文件夹下的 usr/bin
- 查找 gawk 的依赖项 - 您可以通过多种方式做到这一点。
检查 x86 或 x86_64 文件夹中的 Cygwin setup.ini 文件。
查看字符串'@ gawk',在此行之后的行中,您应该找到一个列出依赖项的“requires:”行。
我的读起来像这样-“需要:bash cygwin libgmp10 libintl8 libmpfr4 libreadline7”
要运行 gawk,bash 不是必须的,因为我们有 windows 命令 shell。 (包含 bash 以获取 gawk 所需的其他一些 dll。但是,这会导致安装更多不必要的文件)。其他依赖项包含 gawk 需要运行的文件。
使用 7z 或 xz 等工具将上述每个包提取到单独的文件中。
提取所有依赖项后,将所需的工具 (grep/sed/gawk) 复制到一个文件夹和所有依赖的 .dll 中
您现在应该能够使用准系统 cygwin 安装所需的最少 .dll 集来运行您的工具。
警告:仅提取 setup.ini 中列出的每个工具的依赖项可能还不够。有时,您可能需要执行/运行该工具才能发现需要更多 dll。
还有其他方法可以找出 .exe 所需的 dll - 您可以使用 MS 中的 dumpbin 或 dependency walker、ndepends 或类似工具来查找依赖 dll 的列表
咨询 - How do I detect the DLLs required by an application?
How do I find out which dlls an executable will load?
我还通过仅运行该工具并通过从所需的包中提取来一一安装缺少的 dll 来强制使用此 dll 信息。
当您运行某个工具并出现错误并显示缺少 .dll 消息时,请在此处搜索包含该 dll 的包 - https://cygwin.com/cgi-bin2/package-grep.cgi。输入缺失dll的全名/部分名称,查找包含该dll的包名。
最终,我完成了一个简单的 cygwin 安装,其中只有我需要的工具和 dll。
示例: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 和 dll - cygwin1.dll、cygintl-8.dll
希望这对您有用。 Cywin 安装程序也做了 dll re-basing,我不会在这里冒险。