我希望将特定的 Cygwin 安装作为一个 zip 文件存档,以便随后部署在不同的 Windows PC 上。在调查了问题之后,建议的执行方法是“试错”Cygwin 安装和软件包选择(我应该使用 Cygwin 安装哪些软件包以使其不臃肿,但也拥有我作为开发人员所需的一切?)可能是更具体的要求会有所帮助:我需要最少的 Cygwin 安装 + Perl + 著名的 Perl 库(Win32::API 等) + GNU make + Gcc 编译工具。安装 Cygwin 时应该选择哪些软件包?
2 回答
我一直在尝试 Cygwin,试图获得一个“简单的”,最小的安装。我确实发现安装 grep、gawk、sed 和类似工具等实用程序依赖于 cygwin、base-Cygwin,有时还依赖于不需要的工具,如 bash、coreutils 等,
我只想安装工具及其所需的 dll 并开始检查 Cygwin 包。我发现不使用 Cygwin 提供的 setup.exe 是完成最小 Cygwin 安装的另一种方法。
这就是我完成它的方式。
- 仅使用 ftp 或 http 从任何 Cygwin 镜像站点下载所需的软件包。或者,您可以使用 Cygwin 提供的 setup.exe 下载所有软件包 - 仅下载而不安装。
- 下载成功后,会在 x86/release 或 x86_64/release 目录下找到 zlib、gawk、grep、libiconv 等单个包。 .
- 要安装 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 的列表
咨询 -如何检测应用程序所需的 DLL? 如何找出可执行文件将加载哪些 dll?
我还通过仅运行该工具并通过从所需的包中提取来一一安装缺少的 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,我不会在这里冒险。
使用 Cygwin 的依赖系统,你应该重新安装,取消选择每个包,然后选择 Perl、make 和 gcc,它只会安装所需的包。我认为一些依赖包只是推荐而不是必需的,但是 Cygwin 安装程序方便地将它们标记为推荐。