次のページ
前のページ
目次へ
xmkmf や make がエラーを出さずに正常終了したら、「次の段階」に進みましょう。
しかし、「実際」には一度でうまく行くことは滅多にありません。
ここで、あなたの機知を注ぎ込むのです。
- xmkmfを実行していたとしても、 Link error: -lX11: No such file or
directory 、というエラーで make が失敗することがあると思います。
この原因は Imakefile が適切に設定されていないからでしょう。
Makefileの最初の部分の以下のような行を確認してください。
LIB= -L/usr/X11/lib
INCLUDE= -I/usr/X11/include/X11
LIBS= -lX11 -lc -lm
-L と -I オプションで、それぞれライブラリとインクルードファイルを探す場所を
コンパイラとリンカに対して指定します。この例の場合、X11のライブラリは
/usr/X11/lib ディレクトリに、 X11 のインクルードファイルは
/usr/X11/include/X11 ディレクトリになっています。もし、これがあなたの
マシンにあるディレクトリと間違っていたら、Makefile に適当な変更を
加えて、もう一度 make を実行してください。
- 下のように計算のライブラリで関数の参照先が定義されていないという
エラーがでます。
/tmp/cca011551.o(.text+0x11): undefined reference to `cos'
このバグを取り除くには Makefile の LIB と LIBS に -lm を加えて計算ライブラリにはっきりとリンクすることを示せばよいのです。(前の例を参照してください。)
- まれなことですが、 root になって ldconfig を実行することで、
問題を解決できることがあります。
/etc/ldconfig -n /lib と実行すると、共有ライブラリへのシンボリックリンクを
張り直します。これは、通常はする必要はありません。
- xmkmf が失敗するとき、他の方法として、下記のスクリプトを
実行してください。
make -DUseInstalled -I/usr/X386/lib/X11/config
- たまに、ソースコードを構築するのに古い X11R5 のライブラリを必要とする
ことがあります。もし、 /usr/X11R6/lib の中に R5 のライブラリがある
(最初に Linux をインストールするときにオプションとしてインストール
するかどうか聞かれます。)なら、ソフトウェアの構築に必要なライブラリに
リンクを張る必要があります。 R5 のライブラリは libX11.so.3.1.0 ,
libXaw.so.3.1.0 , libXt.so.3.1.0 という名前です。通常、 libX11.so.3
は libX11.so.3.1.0 へというようにリンクを張る必要があります。
ソフトウェアによっては libX11.so を libX11.so.3.1.0 にリンクを張る必要が
あることもあります。もちろん、"見つからなかった"リンクを
張るためにはrootになって、ln -s libX11.so.3.1.0 libX11.so
と実行してください。
- パッケージによっては一つ、または複数のライブラリを更新する必要
があるでしょう。例えば、StarDivision GmbH の the StarOffice suite
は libc のバージョン5.4.4以上を必要とします。 root になって、ライブラリ
を適切なディレクトリにコピーして、古いライブラリを消去し、シンボリック
リンクを張り直す必要があるでしょう。
注意:もし、失敗するとシステムが動作しなくなってしまうので、上記のことを
するときには十分注意して作業してください。
通常、最新のライブラリはSunsite(
ftp://sunsite.unc.edu)で
見つけることが出来ます。
- Perlやシェルスクリプトがインストールされているにもかかわらず、
No such file or directory といったエラーメッセージが出ることがあります。
この場合、そのファイルが実行可能かどうかパーミッションを確認してください。
また、スクリプトのファイルの一番最初の行に記述してある実行されるべき
シェルやプログラムが指定されている場所にあるかどうか確認してください。
例えば、スクリプトは次のように始まっているはずです。
#!/usr/local/bin/perl
Perl が /usr/local/bin ではなく /usr/bin にインストールされていれば、
スクリプトは動作しないでしょう。動作させるには2つの方法があります。
スクリプトファイルの最初の行を #!/usr/bin/perl に書き換えるか、
ln -s /usr/bin/perl /usr/local/bin/perl と実行して、適切なディレクトリへ
シンボリックリンクを張るというものです。
- X11 のソフトウェアの中には構築するのに Motif のライブラリを必要と
するものがあります。普通の Linux ディストリビューションには Motif の
ライブラリは入っておらず、現在、 Motif は別途 $100〜$200
かかります。(しかし、フリーウェアの Lesstif(
http://www.lesstif.org/) でも多くの場合動作します。)
構築するときには Motif のライブラリが必要ですが、なければ、静的にリンク
したバイナリファイルを入手することができるかも知れません。静的なリンクは
バイナリ自身とライブラリのルーチンが結合しています。よって、ファイルは
大きくなりますが、ライブラリが無くても動作します。
- Configure スクリプトを実行すると構築しようとしているパッケージとは
関係の無いようなおかしな Makefile を作成してしまうことがあります。
これは path で見つかった他のディレクトリの間違った configure を実行して
しまったということです。このようなことを避けるために、必ず ./configure
と実行してください。
- Linux のディストリビューションは libc 5 から新しい libc 6 (glibc 2)
に移行しているところです。ライブラリをバージョンアップすることで古い
ライブラリを使用していたコンパイル済のバイナリファイルが動かなくなる
ことがあるかもしれません。それに対する解決法はソフトウェアをソースから
コンパイルしなおすか、新しいコンパイル済のバイナリを手に入れることです。
もし、システムのライブラリを libc 6 にバージョンアップしているときに
そのような問題に遭遇したなら、 Eric Green の Glibc 2 HOWTO を参照
してください。
- 時々、 Makefile のコンパイルオプションから -ansi オプションを除く
必要があります。このようにすることで、 gcc の 非ANSI 拡張機能が使用
できるようになり、その拡張機能を必要とするパッケージを構築できるように
なります。(この点について指摘してくれた Sebastien Blondeel に感謝します。)
- プログラムによっては root 権限で動作させるために root の setuid を
セットする必要があります。root の setuid をセットするには root になって
から chmod u+s <ファイル名> と実行します。(注意:プログラムの所有者は
あらかじめ root にしておかなければなりません。)こうすることで、ファイルの
パーミッションの setuid ビットを立てます。setuid をセットしなければ
ならないというこのような問題はプログラムがモデムや CD-ROM ドライブのような
システムのハードウェアにアクセスするときや、とある悪名高いエミュレーターの
ように SVGA のライブラリをコンソールモードから呼び出すときに起こります。
警告:root の setuid をセットしたプログラムはシステムのセキュリティ上の
危険を伴います。プログラムは root 権限上で動作するので、致命的な被害を
受ける可能性があります。setuid ビットを立てる前に必要に応じてソース
ファイルを見て、プログラムが何をするのか、確かめてください。
Makefile にシステムに最適なオプションが設定されているかどうか調べてみたい
でしょう。例えば、 -O2 オプションは最高レベルの最適化を行い、
-fomit-frame-pointer オプションは小さいバイナリを作成します。
(ただし、デバッグは出来なくなります。)試験的に構築をしているときや自分が
何をやっているか分からない人はこれらのオプションをいじらないように
してください。
私の経験によると、多分アプリケーションの25%が"そのコンピューターで
正しく"構築できます。他の50%かそこらは大小様々な努力によって、
構築するように"改善され"ます。それにもかかわらず、このことは
膨大な数のパッケージが構築の際に何らかの問題をもっていることを示しています。
それでも、ことによると、 Intel 用の ELF や a.out のバイナリが
Sunsite(
ftp://sunsite.unc.edu) や
TSX-11(
ftp://tsx-11.mit.edu) 等で見つかるかも知れません。
Red Hat(
ftp://redhat.com) や
Debian(
ftp://www.debian.org) には有名な Linux のソフトウェアの
ほとんどがバイナリパッケージとなって膨大なアーカイブとして置いてあります。
多分、ソフトウェアの作者があなたが使っているのと同じマシン用のバイナリを
コンパイルして配布してくれたのでしょう。
注意:もしあらかじめコンパイルしてあるバイナリを入手したなら、あなたの
システムとの互換性を調べる必要があります。
- バイナリはあなたのハードウェア上で動作するか。
(例えば、Intel x86系のものかどうか)
- バイナリはあなたのマシンのカーネルとの互換性があるか。
(例えば、 a.out形式なのか ELF形式なのか)
- 最新のライブラリを必要とするどうか。
- システムに(rpm や deb)のような適切なユーティリティーが
入っているかどうか。
もし、どうやってもだめだったら、 comp.os.linux.x や comp.os.linux.development
といったニュースグループに助けになる情報があるかもしれません。
日本語のニュースグループなら fj.os.linux、jlug.ml.users があります。
しかし、これらのニュースグループで答えてくれる人は皆自分の空いた時間を
使ってボランティアで答えてくれています。決してメーカーのサポートでは
ないので、失礼な態度をとらないようにしてください。また、質問するときには、
わかりやすく、具体的に質問しましょう。また、問題が解決したなら、解決した
ことの報告、解決の要因を忘れずに報告しましょう。
それでもだめだったら、少なくとも、最善を尽くし、たくさんのことを
学んだのだから、それはそれでいいのではないでしょうか。
次のページ
前のページ
目次へ