• 締切済み

Perlccを使ったCGIプログラムのバイナリ化

こんにちは Perlを使ったデータベースをselectするCGIプログラムをバイナリ化したいと考えております。 環境:RedHat, postgreSQL Perl: v5.8.0 built for i386-linux-thread-multi # perlcc target.cgi とコマンド実行したところ、バイナリ化はできるものの、WEBから実行すると、以下のエラーがでてしまいます。 Undefined subroutine &DBI::dr::disconnect_all called at /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi/DBI.pm line 575. 解決策をご存知の方、お願いいたします。

みんなの回答

  • Ethersky
  • ベストアンサー率71% (168/235)
回答No.1

perlccはPerl言語で書いたプログラムをC言語へ変換するものです。 が、変換されたソースは無駄が多いものになってしまいますし、複雑なもの(元のPerl言語で書いたものが)になるほど正しいものに変換することができません。 また、モジュール(DBI等)を呼んでいるものを扱う場合も同様に動作するものに変換するのは困難(というかムリがある)です。 ちなみに今回のエラーメッセージは、 「~/DBI.pmの575行目で指定されたサブルーチン(DBI::dr::disconnect_all)が定義されていません。定義されていたとしても、既に未定義になっています。」 という意味です。 よって、結論を言うと「バイナリCGIを使いたいなら、はじめからC言語等のコンパイラ言語で書きましょう」ということになります。 なお、perlcc以外にもPARやPerl2EXE等のPerlスクリプトの実行形式化ツールがありますが、これは厳密にはバイナリ化されてはいません。 (Perlコンパイラとスクリプトソースを一緒にパッケージにしているだけなので、中身ではPerl言語本来のインタプリタ言語として動いています。)

関連するQ&A