代码之家  ›  专栏  ›  技术社区  ›  HaroldFinch

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

  •  2
  • HaroldFinch  · 技术社区  · 7 年前

    我想使用 pigz 压缩大量焦油档案。

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

    有人知道如何在cygwin下安装pigz吗?

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

    1) 上的自述 this webpage (或者在自述文件中,如果您下载源代码 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包存储库。

    但是这个版本已经过时了(最新的pigz是2.4)。事实上,看起来 Cygwin Ports has migrated to github 在那里搜索pigz什么也找不到。

    我甚至不知道如何使用Cygwin端口!这个 project's homepage 只是说

    按照常规Cygwin安装说明进行安装 此项目当前维护的任何包。

    我假设这意味着要运行cygwin的setup-x86。但当它要求您“选择下载站点”时,您需要输入一些Cygwin端口的URL。

    网络搜索发现的信息很少。 This link 表示要使用 http://sourceware.org/cygwinports/ 但安装程序是x86。exe很快为该URL生成了一个错误。中的说明 this link 也不适合我。

    3 回复  |  直到 7 年前
        1
  •  1
  •   Mark Adler    7 年前

    C99标准规定了 j 的说明符 printf() . (请注意,99指的是1999年,现在是2018年。)您可以通过更改 __STDC_VERSION__-0 >= 199901L || __GNUC__-0 >= 3 0 . 那么它就不会尝试使用 j .

    请让我知道 __STDC_VERSION__ , __GNUC__ __GNUC_MINOR__ 用于编译器。

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

        2
  •  0
  •   HaroldFinch    7 年前

    为了跟进我与@varro和matzeri的上述评论,我现在可以回答我自己的问题:我的怀疑是正确的: RTools 是罪魁祸首。我发现如果我暂时删除所有 R工具 “我的Windows”中的元素 Path 环境变量(对我来说: c:\Rtools\bin c:\Rtools\mingw_32\bin ),然后我就可以 pigz make 工作。

    这样做之后 路径 编辑,我卸载了现有 cygwin ,重新安装 cygwin公司 ,安装了我常用的额外软件包( chere, openssh, subversion, zip, unzip )及其所有依赖项,已安装 制作 及其所有依赖项,已安装 gcc-core (是C编译器)及其所有依赖项。那时,我能够 制作 皮格斯 完美地

        3
  •  0
  •   Binarus    4 年前

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

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

    OP的主要担忧是:“我想用pigz压缩大量的焦油档案。”,我希望这是对这种担忧的一个有用的回答,尽管它没有解释如何绕过编译问题。

    其他注意事项:

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

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

    就我个人而言,我正在使用本机Windows 皮格斯 Cygwin内部的版本。就我所知 皮格斯 没有进度条,这对我来说有点不方便(有时我不得不压缩一个巨大的文件(大约60GB))。绕过此问题的一个方便方法是 pv 公用事业由于我还没有找到它的本机Windows版本,而且我自己也懒得为Windows编译它,所以我使用Cygwin的 pv公司 当我让本机窗口 皮格斯 压缩那些巨大的文件。