Perl 5.8.5 で なんとしても GD モジュールが動かない件。
ずっーと前なんだけど、これだけで数週間ハマった。 他にも悩んでいる人がいかもしれないのと思うんで、メモっとくよ。 環境とかマシンは RedHat Enterprise Linux ES v 4.0。 以下のライブラリは入れてある。 ($ rpm -qa | grep gd-level のように検索する) gd-2.0.28-4 gd-devel-2.0.28-4 libpng10-1.0.16-1 libpng-devel-1.2.7-1 libpng-1.2.7-1 libjpeg-6b-33 libjpeg-devel-6b-33 GD モジュールは、libgd や libjpeg のバージョンに制限があるのだが、 これならそれも問題なくクリアしている。 インストールしても動かないさて、perl モジュール GD のインストール。 Lincoln D. Stein / GD - search.cpan.org 現在のところ、最新版は GD-2.35.tar.gz である。 解凍して make。 $ tar xvzf GD-2.35.tar.gz ライブラリを漏れがないように全て指定するために、 以下のようなファイルを作って実行。 $ more my_make 上記ファイルを実行した後、make。 $ bash my_make 詳細にログを出しながら、ちゃんとインストールされたかをテストする。 $ make test TEST_VERBOSE=1 no JPEG support って、libjpeg がリンクされてないのか!? ガーンΣ(゜ロ゜〃) 数日間の試行錯誤libgd 、libjpeg、libpng は勿論のこと、色々入れ直しましたよ。 ソースから入れてみたり、rpm 使ってみたり。 ソースから入れると、 ***-devel-*** なんてのの場合は、/usr/local/bin にファイルができたりする。 普通は、RH は /usr/bin くらいしか使わないので、 ゴミがたまっちゃったかーと思って、削除したら、 rm /usr/local/bin のつもりが rm /usr/bin だったりして、アヒャヒャヒャヽ(゜∀゜)ノなことに。 man は見られないは、iconv は消えるは、 less も more も vi もねぇよ、という、 シンプルにもほどがある環境になってしまい、大慌てで復旧。 CD から再インストールってテはあるけどさ、 実は他の部署のマシンで、その部署のマシンルームにあるから、 タダでさえマシンルームは許可がないと入れないのに、 他部署の私は、特に入るのが大変なわけ。 だから、マシンに CD を入れて再インストール、というのは無理。 仕方ないから、自分の端末からしこしこ rpm を ftp して入れましたよ。 sftp と ssh が無事だったのが幸いでした。 もう泣きそうですよ。 自分が悪いんだけど。 こういうのって、何年かに一度くらいやるんだよねー。 数年前も、/usr/local/lib 丸ごと削除、ってやったしなぁ。 そのマシンは Solaris でさ、 Linux は大概のアプリは /usr/lib に入っていると思うけど、 Solaris って、よく使うアプリでも /usr/local/lib にあるのよ。 もうディスクマウントは外れるは、 ログインできないは、ぷち臨死体験でしたよ。 自分が悪いんだけど。 解決元に戻って、perl の GD モジュールの件。 ふと GD モジュールのバージョンを下げてみよう、と思い立った。 実は以前 RHEL ES v3.0 で GD モジュールを使ったことがあって、 その時にインストールに使った tar-ball が自マシンに残っていた。 GD-2.32である。 perl のモジュールだから、 libc や kernel のバージョンはうるさく言わないだろうと思い、 前述の方法と同様にインストールしてみた。 $ tar xvzf GD-2.32.tar.gz いよいよテスト。 $ make test TEST_VERBOSE=1 ぶらぼー! no JPEG support が出なくなった! 以下のようなテストファイルでも試してみる。 $ more gd-test.pl こちらもぶらぼー! これでめでたく使える! まとめというわけで、まとめてみると、 以下のセットで使え!ということだ。 RedHat Enterprise Linux ES v4.0 Perl 5.8.5 gd-2.0.28-4 gd-devel-2.0.28-4 libpng-devel-1.2.7-1 libpng-1.2.7-1 libjpeg-6b-33 libjpeg-devel-6b-33 ×GD-2.35.tar.gz ... 動かない! ○GD-2.32.tar.gz Can't locate object method "png" via package "GD::Image" もしくは Can't locate object method "jpeg" via package "GD::Image" という文言で検索して来た方は、 以下の3点を再確認すること。 (1) 各種ライブラリがインストールされているか → gd のほかに、gd-devel が必要なのかも。 libjpeg などについても、 それぞれ対応する libjpeg-devel などが必要っぽい。 (2) 各種ライブラリ(libxxx)のバージョンが合っているか → バージョンが古いとダメ。 (3) GD インストール時にライブラリのパスを明示的にperlに教えてみる → Makefile を確認すればわかることだけど、 Makefile が読めない人は、きちんと引数で指定すべし。 ネットでヒントを探し回ったのだが、 大体上記3つの項目で抜けがある人が多い。 それでもダメなら、私と同じ現象かもしれないので、 GD モジュールのバージョンを下げてみましょう。 どれが stable なのかわからないけど、 とりあえず、GD-2.32 が動いたことは保証できる。 ちなみに、/usr/lib の一部はこんな感じ。 $ /bin/ls -Al libgd.* libjpeg* libpng* だがしかしRedHat Linux 9( kernel 2.4.20、gcc3.2 ) なら GD-2.35 でも動くらしい。 perl の version が 5.8.0 だから? でも 5.8.0 はあんまし stable じゃないので、使うのイヤなんだけど。 多言語まわりもまだおかしいし。
by xiaoxia
| 2007-09-26 22:26
| プログラム言語
|
カテゴリ
以前の記事
2022年 12月 2021年 05月 2019年 12月 2018年 12月 2018年 05月 2018年 03月 2017年 03月 2017年 02月 2016年 08月 2016年 04月 more... 最新の記事
最新のトラックバック
ライフログ
今読んでる
その他のジャンル
記事ランキング
ブログジャンル
|
ファン申請 |
||