デスクトップ・コンピューターに搭載されているCPUのコアは2個から4個、やがては8個へと増加の一途だ。それに応じてソフトウェアが計算量の大きな処理を並列処理する能力の重要性も増している。圧縮関連のツールでは、 mgzip と pbzip2 がマルチコアに対応しており、前者は圧縮処理に、後者は圧縮とその復元処理にマルチコアを活用することができる。
どちらの場合も、圧縮ファイルの復元は、それぞれの標準ツールで可能だ。つまり、pbzip2の圧縮ファイルにはbzip2を、mgzipの圧縮ファイルにはgunzipを使う。Fedora 8の場合、pbzip2のパッケージが標準リポジトリーにあり「yum install pbzip2」でインストール可能。一方、mgzipは、ほとんどのディストリビューションでパッケージがなく、ソースからインストールする必要がある。
しかも、コンパイルでエラーが発生する。zlibヘッダーにはgz_headerが定義されているが、mgzip.cでも同じ変数が正当なgzipアーカイブの16進値を保持するために使われているからだ。
$ make gcc -g -O2 -c -o mgzip.o mgzip.c mgzip.c:40: error: 'gz_header' redeclared as different kind of symbol /usr/include/zlib.h:124: error: previous declaration of 'gz_header' was here mgzip.c: In function 'compress_infile_to_outfile': mgzip.c:530: warning: cast to pointer from integer of different size
解決は簡単。gz_header変数にプレフィックスを付け、それに合わせてこの変数への参照を修正すればよい。参照はmgzip.cの中に数カ所にある。プレフィックスは、gz_header以外で適正なCの識別子であれば何でもよい。たとえば、mgzip_gz_headerなどとする。
