GNU arの謎

クソ忙しい最中、GNU arに致命的な欠陥を発見してしまった。
これは全世界に向けて公表せねばなるまい。

以下はGNU binutils-2.15.91のmanから抜粋したarの書式である。


ar [-X32_64] [-]p[mod [relpos] [count]] archive [member...]

先頭にX32_64というオプションがあるのに注意して欲しい。これはAIXとの互換性を維持するために設けられたオプションでIBM AIXのコマンド・リファレンス 第 1 巻によると、-Xオプションは「ar によって検査するオブジェクト・ファイルのタイプを指定」するのだそうな。そして32_64は「2 ビットと 64 ビットの両方のオブジェクト・ファイルを処理」を指定するオプションである。
AIX環境以外のGNU arでもこのオプションは有効である。manにもそう明記されている。


ar ignores an initial option spelt -X32_64, for compatibility with AIX.
The behaviour produced by this option is the default for GNU ar. ar
does not support any of the other -X options; in particular, it does
not support -X32 which is the default for AIX ar.

ところが、お手元のGNU arで試してみればわかるのだが、このオプションは現在は無効である。-X32_64オプションを指定して実行しようとすると怒られてしまうのだ。


$ ar -X32_64
ar: illegal option -- X

ロスコンパイルしたAIX用のGNU arではちゃんとX32_64オプションがあるので、GNU binutilsのconfigureの時に-X32_64オプションの有効、無効が決まってしまうらしい。そして現在のbinutilsの構成ではmanの記述に反して-X32_64オプションが有効にならないのである。
全世界的に広く使われているGNUソフトウェアにこのような欠陥があるとは大変遺憾である。Richard M. Stallman氏もLinusいじめなどしている暇があるなら、このような足下にある問題から解決すべきでろう。

なお、このarの-X32_64オプション非サポート問題であるが、AIX用のクロスコンパイル環境を構築するなどという愚かな行為に走る場合以外は全く問題にならないので読者諸兄は安心してよろしい。