5.2. コンパイル特有の問題

5.2.1. 'compress' の未定義参照(undefined reference to 'compress') ってどういう意味?

 ふつうは、圧縮ライブラリ(libz)が見つからなかったりリンクできないよ、という意味だ。まず、このライブラリがちゃんとインストールされているか見てね。なければ、見つけてインストールすること。主要な Unix や Unix 系システムにはほとんど入ってるはず。

 もしちゃんとインストールされているのに、それでもエラーが出るなら、別のところでウロウロしてる libz がないかチェックしよう。ときどき隠れていてみんなを困らせる場所が /usr/X11R6/lib だ。 XFree86 がそれをインストールするからなんだけれど。単に消しちゃっても問題はないはずだけれど、自信がなければ、libz.so.renamed とかなんとか別の名前にしておこう。そうすればリンカには見つからないし、この改名でほかのところに問題が出たら、すぐ名前をもとに戻せばいい。

5.2.2. AC_TRY_RUN ってなに、そしてなぜマシンは警告なんか出すの?

 ときどき aclocal, autogen.sh, make なんかを走らせていると、以下のようなメッセージにお目にかかる。configure.in:171: warning: AC_TRY_RUN called without default to allow cross compiling。これは別に心配することはなくて、無視してもまるで問題ない(クロスコンパイルをかけているなら別だけれど)。

 どうしても知りたい人のために話しておくと、クロスコンパイラというのは、あるプラットホーム用のコンパイラで、別のプラットホーム用のコードをつくるためのものだ。たとえば、ある人がインテルプロセッサの GNU/Linux マシン上に、MIPS プロセッサを使った SGI 用バイナリをつくってくれる GCC を入れていたとする。これがクロスコンパイラの一例だ。

 AC_TRY_RUN マクロは、コードの断片をコンパイルして実行しようとするときに呼ばれる。ある特定のコードが、あなたのマシン状で動きそうかどうかを試すのに使われて、その結果に応じて設定が調整される。でもクロスコンパイルをかけているなら、コードの断片は実行できない。だって目的のマシンは、いまコンパイルしてるマシンとは別物だから。そういう場合にどうすればいいかを指定するパラメータが AC_TRY_RUN マクロにはあるけれど、でも GNOME のクロスコンパイルはまだ実験していないので、この値を設定するのは時期尚早だ。その値がないから、この警告が出てくるわけ。