如何在cygwin上安装pigz(parallel gzip)?

时间:2018-01-26 20:02:12

标签: makefile parallel-processing cygwin gzip

我想使用pigz来压缩大量的tar档案。

我正在使用cygwin。不幸的是,pigz不是标准的cygwin软件包之一。

任何人都知道如何在cygwin下安装pigz?

以下是我尝试过的两种技术没有成功:

1)this webpage上的自述文件(或在README文件中,如果您下载源代码from here)表示您应该只能通过

从源代码构建它
  

在此目录中键入“make”以构建“pigz”可执行文件。

当我在我的机器上执行此操作时,我会收到大量警告,从

开始
pigz.c:2950:20: warning: unknown conversion type character 'j' in format [-Wformat=]
                        (intmax_t)g.in_tot, (intmax_t)len, tag);

然后是最后的错误:

gcc  -o pigz pigz.o yarn.o try.o deflate.o blocksplitter.o tree.o lz77.o cache.o hash.o util.o squeeze.o katajainen.o -lm -lpthread -lz
pigz.o:pigz.c:(.text+0xd4f8): undefined reference to `fsync'
collect2.exe: error: ld returned 1 exit status
make: *** [pigz] Error 1

那耗尽了我从源头构建程序的能力......

2)看起来有一个old 2015 port of pigz version 2.3.3 to Cygwin Ports,扩展的cygwin包存储库。

但那个版本过时了(最新的猪圈是2.4)。事实上,它看起来像Cygwin Ports has migrated to github并在那里寻找猪崽找不到任何东西。

我甚至不确定如何使用Cygwin Ports! project's homepage只是说

  

按照正常的Cygwin安装说明进行安装   该项目目前维护的任何软件包。

我认为这意味着运行cygwin的setup-x86.exe,但是当它要求你“选择下载站点”时,你需要为Cygwin Ports输入一些URL。

网络搜索发现的信息很少。 This link说要使用http://sourceware.org/cygwinports/,但setup-x86.exe很快就会为该网址生成错误。 this link中的说明也不适用于我。

3 个答案:

答案 0 :(得分:0)

C99标准指定j的{​​{1}}说明符。 (请注意,99表示1999.现在是2018.)您可以通过将printf()更改为__STDC_VERSION__-0 >= 199901L || __GNUC__-0 >= 3来强制pigz编译不假设C99。然后它不会尝试使用0

请告诉我j__STDC_VERSION____GNUC__对您的编译器的价值。

此外,pigz需要POSIX合规性,这将提供__GNUC_MINOR__电话。您只需删除对fsync()的引用,这只会导致fsync()--synchronous选项无效。

答案 1 :(得分:0)

为了跟进我在@varro和matzeri上面的评论,我现在可以回答我自己的问题:我的怀疑是正确的:RTools是罪魁祸首。我发现如果我暂时从我的Windows RTools env var中移除了所有Path个元素(对我来说:c:\Rtools\binc:\Rtools\mingw_32\bin),那么我就可以获得{{1 }} pigz工作。

执行此make编辑后,我卸载了现有的Path,重新安装了cygwin,安装了我常用的额外软件包(cygwin)及其所有依赖项,已安装{{ 1}}及其所有依赖项,安装chere, openssh, subversion, zip, unzip(是C编译器)及其所有依赖项。那时,我完全可以make gcc-core

答案 2 :(得分:0)

有一种比自己编译更简单的方法。我遇到了同样的问题,通过一些研究发现了多个现成的 .exe 文件 (pigz.exe) 可在 Windows 中直接使用。我正在使用这个:

https://sourceforge.net/projects/pigz-for-windows/files/

OP 的主要关注点是:“我想使用 pigz 压缩大量 tar 档案。”,我希望这是对该问题的有用答案,尽管它没有解释如何解决编译问题。

一些附加说明:

有趣的是,有些人可能没有意识到,没有什么能阻止我们在 Cygwin 中使用普通的 Windows 二进制文件,反之亦然。也就是说,即使 OP 有复杂的 Cygwin / bash(或其他)脚本来驱动 pigz 和整个压缩过程,他也可以使用上面链接的现成的 pigz 本机 Windows 版本。< /p>

无论是否使用 Cygwin,都无需自己编译 pigz,除非您想要最新的功能或错误修复。

就我个人而言,我使用 Cygwin 中的原生 Windows pigz 版本有一段时间了。 AFAIK,pigz 没有进度条,这对我来说有点不方便(有时我不得不压缩一个大文件(大约 60 GB))。解决此问题的一种便捷方法是使用 pv 实用程序。由于我还没有找到它的原生 Windows 版本,又因为我懒得自己为 Windows 编译它,所以我在让原生 Windows pv 时使用 Cygwin 的 pigz 来显示进度压缩那些巨大的文件。