まれにしかないことなのですが、ソースコードが入手できなかったり、さまざ まな要因でソースコードから ELF バイナリが作れないといった理由で a.out バイナリを使う必要に迫られることがあります。
こういうことも起こるので、ELF で組んであるシステムでも大抵は a.out の
ライブラリを全部用意しています。これは
/usr/i486-linuxaout/lib
ディレクトリに置かれます。
a.out ライブラリの番号付けの規則は ELF の場合の規則と違うので、問題を
起こしかねないような衝突はうまく避けられます。したがって、a.out バイナ
リは実行時に正しいライブラリを見つけられるのですが、これが常に正しいわ
けでもありません。
カーネルには a.out のサポートを組み込む必要があるので注意してください。
これは直接組み込んでもかまいませんし、ローダブルモジュールにしてもかま
いません。これを有効にするにはカーネルを再構築する必要があるかもしれま
せん。さらに、Linux ディストリビューションによっては互換性保持のための
特殊なライブラリをインストールする必要があります。例えば、Debian には
a.out の X アプリケーションを実行するための xcompat
がありま
す。
何年か前に Jerry Smith がとても便利な rolodex というプログラム を書きました。このプログラムは Motif ライブラリ(訳注: フリーで手に入ら ない)を使っていますが、好運なことに a.out のライブラリを静的リンクして あるバイナリが入手できます。残念なことに、lesstif ライブラリ を使ってソースを再構築するには大幅に手を入れる必要があります。さらに残 念なことに、ELF システム上では a.out のバイナリは次のようなエラーメッ セージを出力してふっ飛んでしまいます。
xrolodex: can't load library '//lib/libX11.so.3'
No such library
このようなことがあるために、この手のライブラリが /usr/i486-linuxaout/lib
に置かれているのですが、xrolodex は実行時にライブラリの位置を見つける
ことができません。単純な解決法はシンボリックリンクを /lib
ディレクトリに作ることです。
ln -s /usr/i486-linuxaout/lib/X11.so.3.1.0 libX11.so.3
同様のリンクを libXt.so.3 と libc.so.4 ライブラリについて作る必要が あることもわかります。この作業はもちろん root で行う必要があります。 ここで注意ですが、既に入っているライブラリを上書きしたり、バージョン番 号の衝突が絶対に起こらないように確かめてください。幸い、こういった問題 が起こらないようにするため、新しい ELF ライブラリのバージョン番号は古 い a.out ライブラリよりも大きくされています。
上記 3 つのリンクを張れば、xrolodex はうまく動きます。
xrolodex パッケージは元々 Spectro に投稿されていまし たが、今はここから消えてしまったようです。現在は Sunsite から tar.Z 形式で入手できます(サイズは 512K バイトです)。