如何在 cygwin 上安装 pigz(并行 gzip)?
How to install pigz (parallel gzip) on cygwin?
我想用pigz压缩大量tar个档案。
我正在使用 cygwin。不幸的是,pigz 不是标准的 cygwin 包之一。
有人知道如何在cygwin下安装pigz吗?
以下是我尝试过但没有成功的 2 种技术:
1) this webpage (or in the README file, if you download the source from here) 上的 README 说您应该能够仅通过
从源代码构建它
Type "make" in this directory to build the "pigz" executable.
当我在我的机器上这样做时,我收到大量警告tar
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 Ports! project's homepage 只是说
Follow the normal Cygwin installation instructions in order to install
any of the packages currently maintained by this project.
我认为这意味着 运行 cygwin 的设置-x86.exe,但是当它要求您 "Choose A Download Site" 时,您需要为 Cygwin 端口输入一些 URL .
网络搜索找到的信息很少。 This link says to use http://sourceware.org/cygwinports/ but setup-x86.exe soon generated an error for that URL. The instructions in this link 也不适合我。
C99 标准为 printf()
指定了 j
说明符。 (请注意,99 指的是 1999。现在是 2018。)您可以通过将 __STDC_VERSION__-0 >= 199901L || __GNUC__-0 >= 3
更改为 0
来强制 pigz 编译不采用 C99。然后它不会尝试使用 j
.
请告诉我 __STDC_VERSION__
、__GNUC__
和 __GNUC_MINOR__
的值适用于您的编译器。
pigz 还需要 POSIX 合规性,这将提供 fsync()
调用。您可以删除对 fsync()
的引用,这只会导致 --synchronous
和 -Y
选项无效。
为了跟进我对@varro 和 matzeri 的上述评论,我现在可以回答我自己的问题:我的怀疑是正确的:RTools
是罪魁祸首。我发现如果我暂时从我的 Windows Path
env var 中删除所有 RTools
元素(对我来说:c:\Rtools\bin
和 c:\Rtools\mingw_32\bin
),那么我能够让 pigz
make
开始工作。
完成此 Path
编辑后,我卸载了现有的 cygwin
,重新安装 cygwin
,安装了我常用的额外软件包 (chere, openssh, subversion, zip, unzip
) 及其所有依赖项,安装make
及其所有依赖项,已安装 gcc-core
(是 C 编译器)及其所有依赖项。那时,我能够 make
pigz
完美。
有一种比自己编译更简单的方法。我遇到了同样的问题,通过一些研究发现了多个现成的 .exe 文件 (pigz.exe) 可以直接在 Windows 中使用。我正在使用这个:
https://sourceforge.net/projects/pigz-for-windows/files/
OP 的主要问题是:“我想使用 pigz 来压缩大量 tar 档案。”,我希望这是对这个问题的有用回答,尽管它没有解释如何压缩解决编译问题。
一些补充说明:
一些人可能没有意识到的有趣的事情是,没有什么能阻止我们在 Cygwin 中使用正常的 Windows 二进制文件,反之亦然。也就是说,即使 OP 拥有驱动 pigz
和整个压缩过程的复杂 Cygwin / bash(或其他)脚本,他也可以使用现成的 pigz
本机 Windows 上面链接的版本。
不管有没有 Cygwin,都不需要自己编译 pigz
,除非你想要最新的功能或错误修复。
就我个人而言,一段时间以来我一直在使用 Cygwin 中的原生 Windows pigz
版本。 AFAIK,pigz
没有进度条,这对我来说有点不方便(有时我不得不压缩一个大文件(大约 60 GB))。解决此问题的一种便捷方法是 pv
实用程序。由于我还没有找到它的本地 Windows 版本,并且由于我懒得自己为 Windows 编译它,所以我使用 Cygwin 的 pv
来显示进度,当我让本机 Windows pigz
压缩这些大文件。
我想用pigz压缩大量tar个档案。
我正在使用 cygwin。不幸的是,pigz 不是标准的 cygwin 包之一。
有人知道如何在cygwin下安装pigz吗?
以下是我尝试过但没有成功的 2 种技术:
1) this webpage (or in the README file, if you download the source from here) 上的 README 说您应该能够仅通过
从源代码构建它Type "make" in this directory to build the "pigz" executable.
当我在我的机器上这样做时,我收到大量警告tar
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 Ports! project's homepage 只是说
Follow the normal Cygwin installation instructions in order to install any of the packages currently maintained by this project.
我认为这意味着 运行 cygwin 的设置-x86.exe,但是当它要求您 "Choose A Download Site" 时,您需要为 Cygwin 端口输入一些 URL .
网络搜索找到的信息很少。 This link says to use http://sourceware.org/cygwinports/ but setup-x86.exe soon generated an error for that URL. The instructions in this link 也不适合我。
C99 标准为 printf()
指定了 j
说明符。 (请注意,99 指的是 1999。现在是 2018。)您可以通过将 __STDC_VERSION__-0 >= 199901L || __GNUC__-0 >= 3
更改为 0
来强制 pigz 编译不采用 C99。然后它不会尝试使用 j
.
请告诉我 __STDC_VERSION__
、__GNUC__
和 __GNUC_MINOR__
的值适用于您的编译器。
pigz 还需要 POSIX 合规性,这将提供 fsync()
调用。您可以删除对 fsync()
的引用,这只会导致 --synchronous
和 -Y
选项无效。
为了跟进我对@varro 和 matzeri 的上述评论,我现在可以回答我自己的问题:我的怀疑是正确的:RTools
是罪魁祸首。我发现如果我暂时从我的 Windows Path
env var 中删除所有 RTools
元素(对我来说:c:\Rtools\bin
和 c:\Rtools\mingw_32\bin
),那么我能够让 pigz
make
开始工作。
完成此 Path
编辑后,我卸载了现有的 cygwin
,重新安装 cygwin
,安装了我常用的额外软件包 (chere, openssh, subversion, zip, unzip
) 及其所有依赖项,安装make
及其所有依赖项,已安装 gcc-core
(是 C 编译器)及其所有依赖项。那时,我能够 make
pigz
完美。
有一种比自己编译更简单的方法。我遇到了同样的问题,通过一些研究发现了多个现成的 .exe 文件 (pigz.exe) 可以直接在 Windows 中使用。我正在使用这个:
https://sourceforge.net/projects/pigz-for-windows/files/
OP 的主要问题是:“我想使用 pigz 来压缩大量 tar 档案。”,我希望这是对这个问题的有用回答,尽管它没有解释如何压缩解决编译问题。
一些补充说明:
一些人可能没有意识到的有趣的事情是,没有什么能阻止我们在 Cygwin 中使用正常的 Windows 二进制文件,反之亦然。也就是说,即使 OP 拥有驱动 pigz
和整个压缩过程的复杂 Cygwin / bash(或其他)脚本,他也可以使用现成的 pigz
本机 Windows 上面链接的版本。
不管有没有 Cygwin,都不需要自己编译 pigz
,除非你想要最新的功能或错误修复。
就我个人而言,一段时间以来我一直在使用 Cygwin 中的原生 Windows pigz
版本。 AFAIK,pigz
没有进度条,这对我来说有点不方便(有时我不得不压缩一个大文件(大约 60 GB))。解决此问题的一种便捷方法是 pv
实用程序。由于我还没有找到它的本地 Windows 版本,并且由于我懒得自己为 Windows 编译它,所以我使用 Cygwin 的 pv
来显示进度,当我让本机 Windows pigz
压缩这些大文件。