- ベストアンサー
HTML::Embperlが使えない!
HTML::Embperlをインストールしてプログラムを作成したのですがエラーになってしまうのです! OSはRed Hat Linux 8で Perlはv5.8.0 built for i386-linux-thread-multiで HTML::EmbperlはHTML-Embperl-1.2b4-2.i386.rpmです。 原因を特定するために次のとおり、いたって単純なプログラムを作成しました。 #!/usr/bin/perl -w use strict; use HTML::Embperl; これを実行すると Can't locate loadable object for module HTML::Embperl in @INC (@INC contains: /usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/lib/perl5/5.8.0 /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.0 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-t hread-multi /usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_perl .) at ./try line 3 Compilation failed in require at ./try line 3. BEGIN failed--compilation aborted at ./try line 3. のように長々とエラーメッセージが出てしまいます。 $ ls -l /usr/lib/perl5/site_perl/HTML/Embperl.pm -r--r--r-- 1 root root 39448 2月 15 1999 /usr/lib/perl5/site_perl/HTML/Embperl.pm HTML::Embperlのインストール自体は成功していると思うのですが・・・ 誰か、他に何をチェックすればいいか教えてください~
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
一言「Read Documents」に尽きるようです. RPMに過分な信頼をおいてはいけません. RPMをパッケージした人の環境に激しく依存する可能性が高いですし, そもそもパッケージした人がspecファイルを間違ったりしてたら もう終わりです.実際いわゆる「野良RPM」だと結構あるわけです. #ディストリ公認のものだとそういうことは案外少ないけど #RedHat8っていまでもメンテナンスされてる? で。。。CPANから直接ファイルを入手してきて 「きちんとインストールの手順書」を読みましたか? それから,先にいれたRPM版をきちんとRPMの流儀にのっとって 削除しましたか? 同じモジュールを異なる方法でインストールして 整合がとれなくなると悲惨なことになるのはお分かりでしょうか? とくにバージョンが異なっていることにお気づきですか? #RPMはたぶん1.2b4でCPANは2.2.0,互換性がなくても不思議なくらい #バージョンが違います. #実際わざわざ2.0のReadmeに「1.xとの互換性」なんて項目があります >このディレクトリーの中にEmbperl.pmがあったので >このディレクトリーの名前をHTMLへ変更して/usr/lib/perl5/site_perlへ移動しました。 こんなことを手動でするようにどこかに書いてありましたか? 手作業でできるほど生半可なモジュールではないはずですよ. 実際,展開したディレクトリに install.podがあります それを読みましたか? perl Makefile.PL make make test make install この手順を踏めとかいてあるはずです. それと。。。CPANからファイルを落としてくるのと CPANモジュールを使うのは別物です. CPANモジュールはPerlモジュール用のrpmとかaptみたいなものです. 依存関係を考慮して,自動でやってくれる優れものです. 使い方はCPANモジュールそのもののマニュアル 例えば, perldoc cpan をしてください.
その他の回答 (2)
- kabaokaba
- ベストアンサー率51% (724/1416)
とりあえず。。。 >私のレッドハットはCDからインストールしただけのヤツなのでノーメンテ版ですね・・・ いや・・・そういうことではなくって。。。 外部公開サーバではないことと祈りつつ。。 本題. >そして予想はしていましたが日本語でないため、読むのは断念しました。 手厳しいことをいうようですが,論外です. 高校程度の英文であるのが普通なので辞書を片手に読みましょう. >もしよければ削除方法も教えてもらえないでしょうか^^; やはり一言「Read Document」です. ぐぐってもすぐにそれらしい情報に行き着きます. cpan unistall くらいはやってみてください.
お礼
kabaokabaさん、ご返信ありがとうございます。 これは手厳しいですね。 でもスミマセン、今回は読まずに導入させてください・・・ まだ外部には公開していませんので、見逃してください・・・ アンインストール方法についてネットで調べたのですが、これも断念してしまいました;; その代わりに興味深いコマンドの情報を入手しました。 cpan2rpmというコマンドなのですが、 なんと、このコマンドはCPANのモジュールをRPM形式に変換してくれるそうです。 rpmの使い方ならまだ分かるので、これは私にはおあつらえ向きです。 このコマンドを使用してHTML::EmbperlのRPM化に成功しました。 しかし、rpmコマンドでこれをインストールしようとしたのですが、 足りないモジュールがありインストール出来ませんでした。 足りないモジュールをインストールするためにcpan2rpmコマンドを使用して、順次RPMを導入していったのですが、 中には、そのモジュールをインストールするためには更に、いくつかのファイルが足りず、 さらにそのファイルをインストールするためには、またさらに他の部品が足りず、というように階段状に、足りないものを次々報告され、 目的のHTML::Embperlをインストールためには、色々なモジュールをインストールする必要があり、気が遠くなってしまいました。 そう言うわけでcpan2rpmを使用してのHTML::Embperlのインストールは断念しました。 そして振り出しに戻りCPANから入手したHTML::Embperlをインストールすることにしました。 これはkabaokabaさんに教わったとおり perl Makefile.PL make make test make install とやるだけで、あっという間にインストール出来てしまいました。 そして、私が作成したプログラムも無事動かすことが出来ました。 さて、残った問題は、誤ってインストールしてしまったEmbperlの削除です。 別に残しておいても問題無いとは思うのですが、不要なものはなるべく消したいですよね。 今使っているマシンは、つい最近テスト用にレッドハットを入れたばかりですので、 思い切ってレッドハットを入れ直しました^^ そういう訳で結局アンインストールの方法は探せませんでしたが、今回はこれでOKとします。
- sakusaker7
- ベストアンサー率62% (800/1280)
> Can't locate loadable object for module HTML::Embperl というメッセージが出ているので、HTML::Embperlそのものではなく それが呼び出しているモジュール(多分XS(C)でかかれたもの)が 見つからないのではないでしょうか? CPANモジュールを使ってインストールしたならテストを行うので インストールに成功したかどうかは一目瞭然なのですが、 > HTML::EmbperlはHTML-Embperl-1.2b4-2.i386.rpmです。 rpmで入れたときはどうかはわかりません。 いずれにしろインストールがきちんとできていないような気がするのですが、 なぜ成功したと思ったのでしょうか?
補足
sakusaker7さん、ご返信ありがとうございます。 なるほどHTML::Embperlが何か別のモジュールを呼んでいるけど、それが私のリナックスに入っていない可能性があるわけですね。 しかし私の過去の経験上、足りない部品があるなら、何が足りないのかエラーメッセージが教えてくれるはずなのです。 エラーに出てこない以上、私がHTML::Embperlを呼んで自力で探すことになるとは思うのですが、 その前にCPAN版を試したいと思います。 しかし私はRPM以外のソフトを入れた経験がほとんどないので、教えてほしいのです。 まずCPANでEmbperl-2.2.0.tar.gzを入手して # tar -zxf Embperl-2.2.0.tar.gzを実行すると Embperl-2.2.0というディレクトリーができあがります。 このディレクトリーの中にEmbperl.pmがあったので このディレクトリーの名前をHTMLへ変更して/usr/lib/perl5/site_perlへ移動しました。 しかしこれだけではダメなようです。 プログラムを実行すると@INCにEmbperl/Syntax.pmがない旨のメッセージが表示されます。 それもそのはず、Embperl/Syntax.pmは /usr/lib/perl5/site_perl ではなく、その下の /usr/lib/perl5/site_perl/HTML に存在していたのです。 ですのでこのSyntax.pmの入ったEmbperlフォルダーを /usr/lib/perl5/site_perlへコピーしたところ 今度はEmbperl.pmが@INCに存在しない旨のメッセージが表示されたのです。 だって、これについては、私が明示的に /usr/lib/perl5/site_perlでなく /usr/lib/perl5/site_perl/HTMLへ置いたのですものね。 しようがないのでEmbperl.pmも/usr/lib/perl5/site_perlへコピーしました。 これでも、まだエラーになります。 次のエラーはRPM版をインストールしたときのと似ています。 Can't locate loadable object for module Embperl in @INC (@INC contains: /usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/lib/perl5/5.8.0 /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.0 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread- multi /usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_perl .) at /usr/lib/perl5/site_perl/Embperl/Out.pm line 20 Compilation failed in require at /usr/lib/perl5/site_perl/Embperl/Out.pm line 20. BEGIN failed--compilation aborted at /usr/lib/perl5/site_perl/Embperl/Out.pm line 20. Compilation failed in require at /usr/lib/perl5/site_perl/HTML/Embperl.pm line 29. BEGIN failed--compilation aborted at /usr/lib/perl5/site_perl/HTML/Embperl.pm line 29. Compilation failed in require at ./try line 3. BEGIN failed--compilation aborted at ./try line 3. という内容です。 どうやら、まだ色んなものが足りてないようですね・・・ というかEmbperlのインストールのやり方が間違っているのかな?? 何かお気づきの点がありましたら教えてください。 ところで > なぜ成功したと思ったのでしょうか? と言われて初めて気が付いたのですが そもそも私はRPMが正しくインストールできたか確認する方法を知らなかったのです。 rpmコマンドで何もエラーメッセージが表示されず、かつ@INC中にHTML/Embperl.pmが存在していましたので 私は何も疑わずインストールは成功したのだと思いこんでいたわけです。 良く分かってはいないのですがRPMという仕組みに絶対的な信頼をおいていたわけです・・・^^;
お礼
kabaokabaさん、ご返信ありがとうございます。 RPMを過信してはいけないのですね。 現在レッドハット8がメンテされてるかどうかは知りませんが、私のレッドハットはCDからインストールしただけのヤツなのでノーメンテ版ですね・・・ とにかくRPMはCDに入ってるものに限って使用した方が無難ってことですね。 CPANで入手したファイルの手順書は読んでいないのです・・・。 RPMの流儀にのっとって削除するとはrpmコマンドを使用してアンインストールすることと認識してよいでしょうか。それならちゃんとやったのですが・・・。 INSTALL.podというのを見てみました。 そして予想はしていましたが日本語でないため、読むのは断念しました。 そこで、いつもの手段なのですが、良く分からないけど、ひとまず perl Makefile.PL make make test make install を実行してみました。 そして、どうにかインストールできたようです。 しかし、これでもプログラムは動きませんでした。 今、思ったのですが 私がインストールしたのはEmbperl だけど、私がインストールしたかったのはHTML::Embperlだったのでは!? CPANを検索してみたら案の定EmbperlとHTML::Embperlが別々のファイルとして出てきました。 ですので今からEmbperlを消してHTML::Embperlを入れ直さないといけないのです。 インストール方法は教えていただいたとおり覚えました。 もしよければ削除方法も教えてもらえないでしょうか^^;