PerlモジュールDBD::Pgのインストールで質問です。


Sun xVM VirtualBox 2.2.4 r47978 に CentOS-5.3-i386-bin-DVD をインストールしました。
その後09年06月11日時点で最新の yum update を行い、postgresqlなどもインストールしました。

試したいプログラムが、Perl及び同モジュールDBD::Pgを必要とするということで、

# cpan2rpm --install DBD::Pg

を行い、「Package perl-DBD-Pg-1.49-2.el5_3.1.i386 already installed and latest version
」という表示が出たので、インストール出来たかに思われました。
しかし

# /usr/bin/perl -MPg -e 'print "$Pg::VERSION"'

を試してみると、
「Can't locate Pg.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.8.8/・・・」
などと表示され、うまくいっていないようです。

そのためか、目的の試したいプログラムも make の際に
「Can't load '(略1)' for module Protect: (略2): undefined symbol: PL_rsfp_filters at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/DynaLoader.pm line 230.
at (略3) line 6」というエラーが発生して進めることが出来ません。

まずは、PerlのPostgreSQL関連のモジュールを入れるのをなんとかしたいと考えているので、よろしくお願いいたします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/06/25 17:10:59
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:b-wind No.1

回答回数3344ベストアンサー獲得回数440

ポイント60pt
# /usr/bin/perl -MPg -e 'print "$Pg::VERSION";

やるなら、

/usr/bin/perl -MDBD::Pg -e 'print "$DBD::Pg::VERSION";

じゃないのか?

そのためか、目的の試したいプログラムも make の際に

「Can't load '(略1)' for module Protect: (略2): undefined symbol: PL_rsfp_filters at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/DynaLoader.pm line 230.

at (略3) line 6」というエラーが発生して進めることが出来ません。

略すな。分からん。


少なくとも CentOS の postgresql-devel パッケージは入れたの?

あと、わざわざ CPAN 使わなくても、perl-DBD-Pg パッケージも有ったと思うけど?

id:halohalolin

b-windさんありがとうございます。

> /usr/bin/perl -MDBD::Pg -e 'print "$DBD::Pg::VERSION";

> じゃないのか?

元々Perlで動作を試したいソフトとは「E-Shoppy Mall V3 試用版 ( https://www.e-shoppy.com/ )」です。

そのサイトのQ&Aコーナーに記載があったので、試してみたのが上記の内容です。

よくあるご質問詳細 E-Shoppy Mall Pro M+

https://www.e-shoppy.com/crm/faq/detail.html?doc_id=274

> 略すな。分からん。

略さずその前後の内容を記載すると、以下のとおりになります。

[root@localhost eshoppy]# make

=== Setting local directories

=== Setting local files

=== Setting CGI files for users

=== Setting CGI files for managers

=== Setting script files for managers

=== Setting .htaccess files

=== Setting configuration file

Can't load '/opt/lampp/htdocs/eshoppy/local/lib/Protect.so' for module Protect: /opt/lampp/htdocs/eshoppy/local/lib/Protect.so: undefined symbol: PL_rsfp_filters at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/DynaLoader.pm line 230.

at /opt/lampp/htdocs/eshoppy/local/lib/Cozy/base.pm line 6

Compilation failed in require at /opt/lampp/htdocs/eshoppy/local/lib/Cozy/base.pm line 6.

BEGIN failed--compilation aborted at /opt/lampp/htdocs/eshoppy/local/lib/Cozy/base.pm line 6.

Compilation failed in require at /opt/lampp/htdocs/eshoppy/local/lib/ESP/SMS/Plugin.pm line 10.

BEGIN failed--compilation aborted at /opt/lampp/htdocs/eshoppy/local/lib/ESP/SMS/Plugin.pm line 10.

Compilation failed in require at /opt/lampp/htdocs/eshoppy/local/plugins/00config.pl line 7.

BEGIN failed--compilation aborted at /opt/lampp/htdocs/eshoppy/local/plugins/00config.pl line 7.

Compilation failed in require at -e line 1.

make: [config] エラー 2 (無視されました)

> 少なくとも CentOS の postgresql-devel パッケージは入れたの?

いま調べてみたら入れていないことがわかりましたので、入れてみます。

> あと、わざわざ CPAN 使わなくても、perl-DBD-Pg パッケージも有ったと思うけど?

その通りです。

yumなど慣れていないので、検索で調べて見つけたのがたまたまCPANの方法でしたので、こちらで行いました。

2009/06/24 16:19:58
  • id:b-wind
    そもそもの前提が間違ってるな。
    必要なのは、DBD::Pg ではなく Pg モジュールだ。
    http://www.google.co.jp/search?hl=ja&q=perl+postgresql&sourceid=navclient-ff&rlz=1B3GGGL_ja___JP324&ie=UTF-8
  • id:halohalolin
    b-windさん何度もありがとうございます。

    現在、Pgモジュールのインストールがわからなくて困っている状態です。

    CPANより http://search.cpan.org/~mergl/pgsql_perl5-1.9.0/ から入手しました
    しかし、添付のREADMEによると

    1. perl Makefile.pl
    2. make
    3. make test
    4. make install

    とのことですが、これを実行すると

    [ユーザー名@localhost pgsql_perl5-1.9.0]$ perl Makefile.PL
    Configuring Pg
    Remember to actually read the README file !
    please set environment variables POSTGRES_INCLUDE and POSTGRES_LIB !
    [ユーザー名@localhost pgsql_perl5-1.9.0]$ make
    make: *** ターゲットが指定されておらず, makefile も見つかりません. 中止.
    [ユーザー名@localhost pgsql_perl5-1.9.0]$ make test
    make: *** ターゲット `test' を make するルールがありません. 中止.
    [ユーザー名@localhost pgsql_perl5-1.9.0]$ make install
    make: *** ターゲット `install' を make するルールがありません. 中止.

    と、2. make以降エラーが発生して、上手くインストールすることができません。

    何度も恐縮ですがよろしくお願いします。
  • id:b-wind
    エラー内容がそのまま書いてあるだろ。

    Remember to actually read the README file !
    please set environment variables POSTGRES_INCLUDE and POSTGRES_LIB !
  • id:halohalolin
    b-windさん、お付き合いいただいてありがとうございます。

    redhat9とpostgresql-7.3.4でPg.pmを使う
    http://www.aubetec.com/hiruneko/linux/perl-pg.html

    を参考に

    # export POSTGRES_LIB=/usr/lib/pgsql
    # export POSTGRES_INCLUDE=/usr/include/pgsql

    また、環境変数を/etc/profileの末尾にも同様の設定を施した上で
    もう一度、perl Makefile.PLしましたところ、今度は

    [root@localhost pgsql_perl5-1.9.0]# perl Makefile.PL
    Configuring Pg
    Remember to actually read the README file !
    OS: linux
    Checking if your kit is complete...
    Looks good
    Writing Makefile for Pg
    [root@localhost pgsql_perl5-1.9.0]# make
    cp Pg.pm blib/lib/Pg.pm
    AutoSplitting blib/lib/Pg.pm (blib/lib/auto/Pg)
    /usr/bin/perl /usr/lib/perl5/5.8.8/ExtUtils/xsubpp -typemap /usr/lib/perl5/5.8.8/ExtUtils/typemap -typemap typemap Pg.xs > Pg.xsc && mv Pg.xsc Pg.c
    gcc -c -I/usr/include/pgsql -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -DVERSION=\"1.9.0\" -DXS_VERSION=\"1.9.0\" -fPIC "-I/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE" Pg.c
    /bin/sh: gcc: command not found
    make: *** [Pg.o] エラー 127

    と、makeのところでエラーが発生しました。
    gccが未インストールによるエラーだと考えたので、現在 pirut から開発関連のソフトをインストールしています。

    進展がありましたら、コメント追記します。よろしくお願いします。
  • id:halohalolin
    開発関係のソフトをインストールして、再び Make してみたところ、エラーが発生しました。

    [root@localhost pgsql_perl5-1.9.0]# make
    gcc -c -I/usr/include/pgsql -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -DVERSION=\"1.9.0\" -DXS_VERSION=\"1.9.0\" -fPIC "-I/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE" Pg.c
    Pg.xs: In function ‘constant’:
    Pg.xs:76: 警告: label ‘not_there’ defined but not used
    Pg.xs: In function ‘XS_Pg_conndefaults’:
    Pg.xs:162: 警告: 真偽値として使われる代入のまわりでは、丸括弧の使用をお勧めします
    Running Mkbootstrap for Pg ()
    chmod 644 Pg.bs
    rm -f blib/arch/auto/Pg/Pg.so
    gcc -shared -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -L/usr/local/lib Pg.o -o blib/arch/auto/Pg/Pg.so \
    -L/usr/lib/pgsql -lpq \

    chmod 755 blib/arch/auto/Pg/Pg.so
    cp Pg.bs blib/arch/auto/Pg/Pg.bs
    chmod 644 blib/arch/auto/Pg/Pg.bs
    Manifying blib/man3/Pg.3pm
    [root@localhost pgsql_perl5-1.9.0]# make test
    PERL_DL_NONLAZY=1 /usr/bin/perl "-Iblib/lib" "-Iblib/arch" test.pl
    Can't call method "errorMessage" on an undefined value at test.pl line 99.
    make: *** [test_dynamic] エラー 255

    エラーが発生しているようなのですが、このまま make install して良いものなのでしょうか?
    ご経験者の方恐縮ですが、よろしくお願いします。
  • id:halohalolin
    結局のところPg.pmの問題は現在もわかっていません。

    しかし、E-Shoppy Mall開発元のユニインターネットラボ株式会社へも問い合わせていたところ
    なんとCentOS向け版をご用意していただき、試しましたらPg.pmの件が片付いていない私の環境でも
    make についてエラーが出ることなく実行を成功することができました。

    その為問題解決したということで、質問を閉じます。

    b-windさんありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません