我想使用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中的说明也不适用于我。
答案 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\bin
和c:\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
来显示进度压缩那些巨大的文件。