6月 10, 2012

glibc 2.15のビルドがループする(未解決)

CentOS5.8にgcc 4.7が入っている環境で、glibc 2.15をビルドしようとすると、nptlのところで延々とループしてしまう現象に遭遇した。
検索してみると、「時計が狂ってるんじゃない?アハン?」「VMだったから狂ってたよ!イエアー」みたいな感じで解決してしまっていた。
しかし、うちの場合は実マシンに直接入ってるし、dateコマンドを叩いてみても正しい時刻が返ってくる。

途方に暮れていたところ、別の検索結果から、インストール先のincludeを消すか名前を変えたら上手く行ったよ、という書き込みを発見。
/usr/localにインストールしようとしているときに、/usr/local/includeの方を参照しちゃって、まずいことになるらしい。

早速、
mv /usr/local/include /usr/local/include_org
としてconfigureしてみると、ヘッダファイルが見つからないというエラー。
そ、そうか…。

元に戻して、configureをしてから/usr/local/includeをリネーム。
すると、gd.hが見つからないというエラー。
確かに、gd.hも/usr/local/includeに入っていた。

もう一度、configure --helpを見直すと、gdのインクルードディレクトリを指定するオプションがあった。
もしかして、このために?というようなオプション。

結局、以下のような手順で問題の箇所は通過出来た。

1.ソース展開
  tar jxf glibc-2.15.tar.bz2
2.展開したディレクトリに入る
  cd glibc-2.15
3.ビルドディレクトリを作る
  mkdir -p build
4.ビルドディレクトリに移動
  cd build
5.gdのインクルードディレクトリを参照するためのシンボリックリンクを用意
  ln -s /usr/local/include /usr/local/gd
6.configure
  ../configure --disable-sanity-checks --with-gd-include=/usr/local/gd
7.インストール先のincludeディレクトリをリネーム
  mv /usr/local/include /usr/local/include_org
8.シンボリックリンクの先が居なくなってるので張り直し
  rm -f /usr/local/gd
  ln -s /usr/local/include_org /usr/local/gd
9.make
  make

しかし、その後もmakeでエラーが頻発し、もう前にも後ろにも進めないという状態。
結局諦めた。


1.そもそもの発端は、MongoDBにアクセスするC++プログラムを書きたい。
2.標準で入っているboost 1.33では、古くてビルドが通らない。
3.boost最新版がgcc4.1でビルド出来ない。
4.gcc4.7を/usr/localに入れる。
5.phpが起動しなくなった。
6./lib64に入っているlibc.so.6(glibc 2.5由来)と/usr/local/lib64/libc.so.6(glibc 2.15由来)が衝突している(後者を読んで欲しいのに、前者が読まれる)

というようなことで、いろいろ環境を立ち直らせたかったのですが、gcc4.7はまだ早すぎたようです。

結局CentOS6.2を入れ直して標準のgccのバージョンが上がれば…と期待しつつ、システムを入れ替えることにしました。
アップグレードはサポート対象外とのことで、再インストールを予定しています。とりあえずはyumからのアップデートも試してみようかと思います。成功した報告はないらしいのですが。

0 件のコメント:

コメントを投稿