我希望将特定的Cygwin安装作为一个zip文件存档,以便在不同的Windows PC上进行部署。在调查问题后,建议的执行方式是“试错”Cygwin安装和包选择(What packages should I install with Cygwin to make it not bloated but also have everything I would need as a developer?) 可能更具体的要求会有所帮助:我需要最小的Cygwin安装+ Perl +着名的Perl库(Win32 :: API等)+ GNU make + Gcc编译工具。安装Cygwin时应该选择哪些软件包?
答案 0 :(得分:1)
我一直在试验Cygwin尝试获得“简单”,最小化安装。我发现像grep,gawk,sed和类似工具这样的安装实用程序依赖于cygwin,base-Cygwin以及有时不需要的工具,如bash,coreutils等。
我想只安装工具及其所需的dll,并开始检查Cygwin包。我发现不使用Cygwin提供的setup.exe是完成最小Cygwin安装的另一种方法。
这就是我完成它的方式。
在尝试以下操作之前,请确保您拥有7z.exe,xz.exe,bzip2或其他能够解压缩.xz或bzip存档的工具
在下面安装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或依赖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的包的名称。
最终,我最终只使用了我需要的工具和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和dll - cygwin1.dll,cygintl-8.dll
希望这有用。 Cywin安装程序也会进行dll重新编译,我不会冒险进入这里。
答案 1 :(得分:0)
使用Cygwin的依赖系统,您应该只进行一次新安装,取消选择每个包,然后选择Perl,make和gcc,它将只安装所需的包。我认为一些依赖包只是推荐而不是必需的,但是Cygwin安装程序可以方便地将它们标记为推荐。