[ホーム] -> [顧問の戯れ言]

顧問の戯れ言

Import, Export, ld... so?

2001年2月20日

ここ数年、仕事の関係で AIX をさわる機会が増えています。まあ、UNIX 系の OS の中でも、管理ツールに関して言えば、AIX はかなりよくできている部類に入ると思います。SMIT とかあるので簡単だし。ほとんどの管理が SMIT に統合されていて、知らない機能の設定をするのに、コマンドのマニュアルを探して読んだりしなくて済むので楽ですね。SMIT 自体は内部でコマンドを呼んでいるので、SMIT で出来ることは、コマンドラインからでも実行できます。もっとも SMIT 自体が、telnet などのコンソールでも動かせるので、コマンドはほとんど知らないのですが(覚える気力が出ないです・・・。man コマンドセットアップするのに、すごいディスクが必要だし)。ただ、その反動で、AIX のすべての設定を SMIT から変更できるように、あらゆる設定をコマンドで変更するようになっています。/etc/inittab をコマンドを使って編集するのなんて、AIX くらいなものなのではないかなぁ。他の UNIX はよく知らないけどね。

で、まあ、それはそれでいいのだけど、AIX 上でフリーのソフトを利用しようとなると結構大変です。最近の UNIX 上で動くフリーのソフトって、猿のように

# ./configure
# make
# make install

て、実行すればインストールされるのですが(偏見)、これがなかなかうまくいかないのです。しかも悪いことに、特にエラーが無くコンパイルされてインストールされてしまうケースが多いのです。で、実行してみると、セグメンテーションフォールトの嵐。いろいろなソフトをインストールしてみた結果、AIX のシェアードライブラリの作成方法が特殊なせいだと結論を出しました。Solaris とか Linux の場合って、-fPIC とかつけてコンパイルして、-shared でリンクすればいいのだけど、AIX はエクスポートファイルとか作らないといけません。まあ、Win32 上のやつも、エクスポートファイルを作りますが。で、こいつが問題で、たいていのソフトはエクスポートファイルが正しくありません。でもコンパイル自体は成功してしまうケースが多く、実行するまでわからないのです。特に多いのが、実行時に動的にシェアードライブラリをロードするプログラムです。dlopen 系のシステムコールを使った瞬間に、セグメンテーションフォールトとなります。代表的なのは、Perl や Apache などですね。

いろいろ試した結果、いくつか悟ったことがあります。

まあ、これ以外でもヘッダーファイルの違いでコンパイルできなかったり、ld のオプションがボケボケだったり。まあ概ねリンクが大変ですね。それと、C++ のソフトのコンパイルは、未だにうまくできないです。ていうか、g++ がコンパイルできないからねぇ。私が手元でやった作業のログを、追々公開したいなあとか思っていますので、気長にお待ちください。

戻る