次のページ 前のページ 目次へ

6. a.out 形式のバイナリの後方互換性

まれにしかないことなのですが、ソースコードが入手できなかったり、さまざ まな要因でソースコードから ELF バイナリが作れないといった理由で a.out バイナリを使う必要に迫られることがあります。

こういうことも起こるので、ELF で組んであるシステムでも大抵は a.out の ライブラリを全部用意しています。これは /usr/i486-linuxaout/lib ディレクトリに置かれます。 a.out ライブラリの番号付けの規則は ELF の場合の規則と違うので、問題を 起こしかねないような衝突はうまく避けられます。したがって、a.out バイナ リは実行時に正しいライブラリを見つけられるのですが、これが常に正しいわ けでもありません。

カーネルには a.out のサポートを組み込む必要があるので注意してください。 これは直接組み込んでもかまいませんし、ローダブルモジュールにしてもかま いません。これを有効にするにはカーネルを再構築する必要があるかもしれま せん。さらに、Linux ディストリビューションによっては互換性保持のための 特殊なライブラリをインストールする必要があります。例えば、Debian には a.out の X アプリケーションを実行するための xcompat がありま す。

6.1 事例

何年か前に 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 バイトです)。


次のページ 前のページ 目次へ