DBI,DBD(Perlのモジュール)インストールできず

PostgreSQLをPerlで制御しようと、Perlモジュール、DBIとDBD::Pgをインストールしようとしたのですが、エラーが出て、うまくいきません。
長くなるので、最初に概略を書きますと、DBD::Pgのmake testで、
 dyld:Perl Undefined Symbols
というエラーが発生しています。
手順としては、CPANからモジュールをダウンロードしてきて、READMEに書いてある通りの手順でインストールしました。
最初、DBIのインストールで、
make: *** [test_dynamic] Error 35
と出るをかまわずmake installし、その後で、DBD::Pgでmake testすると、どうしても上記のエラーが出ます。
dyldというのが、よくわかっていないのですが、dlopenと関係ありそうだったので、dlcompatをインストールしてみたり、ML(英語 http://archive.develooper.com/macosx@perl.org/msg04283.html)で、検索したら同じ症状の人がいたものの、それを参考にしてみてもうまくいかず(setenv//archive.develooper.com/macosx@perl.org/msg04283.html)で、検索したら同じ症状の人がいたものの、それを参考にしてみてもうまくいかず(setenv POSTGRES_LIB "/usr/local/pgsql/lib -lssl")、途方に暮れてしまいました。
もちろん、sudo ranlib /usr/local/pgsql/lib/libpq.aは実行してます。
どなたか、インストールに成功した方いらっしゃいますか?

投稿日 2003/02/02 19:24

返信: 16

2003/02/03 03:06 Community User への返信

> DBIのインストールで、
> make: *** [test_dynamic] Error 35
> と出るをかまわずmake install
これを潰した方が早そうですが...。いかにも関係しそうな...。
> dyldというのが、よくわかっていない
man dyld

2003/02/03 07:51 Community User への返信

おっしゃる通り、DBIのインストール自体失敗してます。
しかし、こちらは、エラーの内容がわからないのです。
make testの結果で、エラーらしいところは、
t/10examp..............dubious
Test returned status 20 (wstat 5120, 0x1400)
DIED. FAILED tests 104-245
Failed 142/245 tests, 42.04% okay
(中略)
t/zz_80proxy_pp........skipped
all skipped: modules required for proxy are probably not installed
Failed Test Stat Wstat Total Fail Failed List of Failed
-------------------------------------------------------------------------------
t/10examp.t 20 5120 245 142 57.96% 104-245
9 tests skipped.
Failed 1/34 test scripts, 97.06% okay. 142/1108 subtests failed, 87.
なんですが、「何が足りない」とかのメッセージがないので、どうしたものかと。

2003/02/03 08:19 Community User への返信

いまちょっと手元に Mac OS X がないので詳しくは調べられませんが、ワタクシも DBI を make したときに、同じエラーをもらって、そのままインストールしました。
DBD::Pg は、テスト用スクリプト( t ディレクトリ)の最初のテストで、テスト用テーブルをクリエイトしているのですが、そこで使えない型(日付に関する型です)を宣言しており、エラーになり、芋づる式にその後のテストも失敗しました。
PostgreSQL の最近のバージョンから、その型が駄目になったような気配(あいまいですみません)で、 DBD::Pg のほうがそれについて行っていないのでしょうか。
とにかく、そのテストスクリプトを手直ししたら、機嫌がよくなりました。それぞれのバージョンは今は確認できませんが当時最新のものです。
perl や DBI, DBD::Pg, それから PostgreSQL のバージョンも記載されますとよろしいかと思います。
ところで、ワタクシはそんなに詳しくはないのですが、そんな感じに強引にインストールしました。そのときは Mac OS X 10.2.2 のときでした。
いたるところがあいまいでごめんなさい。

2003/02/03 08:56 Community User への返信

うちの環境のPerl(/usr/bin/perl)は5.8に置き換えてしまっているために、環境が異なるので参考になるかどうかは分かりませんが、DBI 1.32の

make && make test
は問題なく終わりました。
一部インストールしていないモジュールが必要な機能のテストはスキップされましたが、

All tests successful, 9 tests skipped.
Files=34, Tests=1108, 71 wallclock secs (19.27 cusr + 3.03 csys = 22.30 CPU)

という結果でした。

2003/02/03 09:26 Community User への返信

同じエラーが出て、その後成功した方がいると安心します。
PosgtgreSQLは最新バージョン(7.3.1)です。
DBIは1.32、DBD::Pgは1.21で、すべて最新です。
私もテストスクリプトいじってみて、だめなら5.8にしてみます。
とりあえず数日チャレンジ。

2003/02/04 22:15 Community User への返信

hwat様
ご確認ありがとうございました。
これで、私のところにインストールできないのは、私の環境の問題化と。(誰の環境でもインストールできないのなら、やるだけ無駄なので)
2つ気が付いたことがあります。
1、DBIのバージョン
最新バージョンは1.32ですが、hwatさんのところでは1.30ですね。ためしに1.30をおとしてきてmake testしたらエラーはなくなりました。
2、perlのパス
DBD::Pgのmake testで最初に表示されるところですが、私は、
PERL_DL_NONLAZY=1 /usr/bin/perl -Iblib/arch -Iblib/lib -I/System/Library/Perl/darwin -I/System/Library/Perl -e 'use Test::Harness qw(&runtests $verbose); $verbose=0; runtests @ARGV;' t/*.t
なのですが、hwatさんのところでは、
PERL_DL_NONLAZY=1 /usr/local/bin/perl -Iblib/arch -Iblib/lib -I/System/Library/Perl/darwin -I/System/Library/Perl -e 'use Test::Harness qw(&runtests $verbose); $verbose=0; runtests @ARGV;' t/*.t
と、perlのパスが/usr/local/bin/perlとなってますが、何か設定をかえてますでしょうか?
/usr/bin/perlに問題あるかもという気もしてきました。
5.8は/usr/opt/perl にインストールされるということなので、成功している方は、ともに、Perlのパスが/usr/bin/perlではないみたいですので。

2003/02/04 22:58 Community User への返信

/usr/local/bin/perl は、 /usr/bin/perl のハードリンクです(おなじものです)。
bash-2.05a$ /usr/local/bin/perl -v
This is perl, v5.6.0 built for darwin
Copyright 1987-2000, Larry Wall
...
...
Perl は、余所の ISP などでは /usr/local/bin にある事がよくあって、 Mac で CGI スクリプトなどを作っておる際に、いざその ISP に上げるときに、例の一行目の #!/usr.... 行を書き換えるのが面倒だな、という些細な理由のためにハードリンクしています。
そのほかモジュールとかは沢山インストールしてますが、 Perl 自体はなんにもいじっていないですょ。
DBI のバージョンについては... 新しい方がイイような気もしますが、ちょっと詳細は解りません。試しに、再度 (DBI 1.30 を) make test してみました。
...
...
All tests successful, 6 tests skipped.
Files=26, Tests=718, 25 wallclock secs (11.35 cusr + 2.07 csys = 13.42 CPU)
PERL_DL_NONLAZY=1 /usr/local/bin/perl -Iblib/arch -Iblib/lib -I/System/Library/Perl/darwin -I/System/Library/Perl test.pl
test.pl
DBI test application $Revision: 11.5 $
Using /Library/Works/DBI-1.30/blib
Switch: DBI 1.30 by Tim Bunce, 1.30
Available Drivers: ExampleP, Pg, Proxy
dbi:ExampleP:: testing 5 sets of 20 connections:
Connecting... 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Disconnecting...
Connecting... 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Disconnecting...
Connecting... 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Disconnecting...
Connecting... 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Disconnecting...
Connecting... 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Disconnecting...
Made 100 connections in 0 wallclock secs ( 0.07 usr + 0.00 sys = 0.07 CPU)
Testing handle creation speed...
10000 NullP statement handles cycled in 2.5 cpu+sys seconds (3937 per sec)
test.pl done
bash-2.05a$
と、 Success ですね、昔はエラーを貰っていたような気がしたのですが、もしかしたら記憶違いがあるのかもです。しかし、特別なことは、していない(つもり)なので、Toshiaki Koike の所では、なんででしょう?(こんなオチですみません)。
追記:ああ、DBI 1.32 でエラーなんですね、いまためしたら、うちもエラーでます。

2003/02/07 23:31 Community User への返信

解決しました。
環境変数をかえてみたり、PostgreSQLをインストールし直したりとperl Makefile.PL、make、make test、./configure、make cleanなどのコマンドを数十回打ち込んだあげく、やっとインストール成功です。
hwatさんや佐々木さんの成功例に勇気づけられました。もし誰ひとりインストールできていないのならやるだけ無駄と思ってやめていたかも(実際、Google で検索してみると、海外でも失敗した人結構いるんですよ。しかも、その後成功した形跡なし。http://archives.postgresql.org/pgsql-interfaces/2002-10/msg00058.php)
...などと報告しただけでは情報の共有にもなりませんので、今後、同じような現象が発生した方の参考になればと、手順をまとめておきます。
*環境 MacOSX 10.2.3
 2002 December Developer Tools
Perlのモジュールのダウンロードは全てCPANからです。
1、PostgreSQL(以下、PGと略します)のインストール
最初は、Marc LiyanageさんのOSX用のパッケージ(http://www.entropy.ch/software/macosx/postgresql/)でインストールしたのですが、これがPerl向きではなかったかもしれません。もちろんPG自体のインストールはうまくいきますし、JDBCドライバも一緒にインストールされるみたいですので、JAVAでPGを操作する人にはいいかもしれませんが、私の場合、結局はソースからのコンパイルで成功しました。
まず、readlineというライブラリが必要になります。
またコンパイルには、通常のmakeではなく、gmake(GNU make)が必要になるということ。
で、gmakeをインストールしたところ、コマンド名はmakeのままだったので、ひょっとしたら、最初からGNU makeだったかもしれません。
PGは、7.3.1のソースをダウンロード。
./configureのオプションで、マルチバイトとPerlインターフェースモジュールの構築をします。
./configure --enable-multibyte --with-perl
nake
make check
sudo make install
/etc/hostconfigを編集し、
POSTGRES=-YES-
を追加。
2、専用ユーザーの作成
ユーザー名、postgresで専用のユーザーを作成しました。「ユーザーがコンピュータを管理できるようにする」はチェックしません。
このユーザの環境変数を以下のように設定(.cshrcに記述)
setenv PATH ${PATH}:/usr/local/bin:/usr/local/pgsql/bin:/usr/X11R6/bin:$PATH
setenv POSTGRES_HOME /usr/local/pgsql
setenv MANPATH /usr/X11R6/man:/usr/local/bin:${PATH}:/usr/local/man:/usr/local/share/man
:/usr/local/pgsql/man:
setenv PGLIB /usr/local/pgsql/lib
setenv PGDATA /usr/local/pgsql/data
setenv POSTGRES_INCLUDE /usr/local/pgsql/include
setenv POSTGRES_LIB /usr/local/pgsql/lib
setenv LD_LIBRARY_PATH /usr/local/pgsql/lib:/lib:/usr/local/lib:/usr/lib
setenv DYLD_LIBRARY_PATH /usr/local/pgsql/lib:/lib:/usr/local/lib:/usr/lib
最後の DYLD_LIBRARY_PATH は本当に必要だったかどうかわかりませんが、dyldのエラーがでていたので、念のためつけました。
で、次のinitdbでロケールが日本語にセットできないようなエラーがでていたので、ターミナルで、
setenv LC_ALL C
setenv LANG
を設定。
3、データベースクラスタの設定=データベースの起動
root# ranlib /usr/local/pgsql/lib/libpq.a
root# mkdir /usr/local/pgsql/data
root# chown -R postgres /usr/local/pgsql
root# su postgres
postgres% initdb -D /usr/local/pgsql/data
postgres% pg_ctl -D /usr/local/pgsql/data -l postgres.log start
postgres% createdb test
/usr/local/pgsql/data/postgresql.confで、
silent_mode = true
tcpip_socket = true
syslog = 2
と編集しました。
http://www.ne.jp/asahi/mac/blue/pages/osx/postgres.html を参考にさせていただきました)
4、DBIのインストール
実際には、試行錯誤を繰り返しているので、一番最初に行ったことになります。
DBIのバージョンは1.30です。現時点での最新1.32ではエラーがでます。
また、これはどういう状況で出たか確定していないのですが、make testで、
.Can't locate Time/HiRes.pm in @INC
のエラーが出たので、Time/HiResのモジュールをインストールしました。
5、dlcompatのインストール
はっきり言って、今回の目的には不要の可能性は高いのだが、dyld : perl Undefined Symbolsというエラーが出ていたため、dyldのエラーに関係ありそうだったので、インストールしただけ。
でも結局dyldについてはよくわかってません。そりゃ、manみれば書いてありますが、どちらかといえばアプリケーションを作成する場合の使用方法であって、モジュールのインストール時にエラー出た場合にどうすればいいのかなんてヒン

2003/02/07 23:31 Community User への返信

5、dlcompatのインストール
はっきり言って、今回の目的には不要の可能性は高いのだが、dyld : perl Undefined Symbolsというエラーが出ていたため、dyldのエラーに関係ありそうだったので、インストールしただけ。
でも結局dyldについてはよくわかってません。そりゃ、manみれば書いてありますが、どちらかといえばアプリケーションを作成する場合の使用方法であって、モジュールのインストール時にエラー出た場合にどうすればいいのかなんてヒントはなかったみたい。
6、DBD::Pgのインストール
バージョンは1.21。
インストールに必要な環境は、
Perl 5〜
DBI 1.30〜
PostgreSQL 7.3〜
Test::Simple 0.17〜
上の3つは、ここまででインストール済み。
Test::Simpleは、なかったのでインストール。
PG は起動した状態で成功しました(やはり起動していなければエラーでて当たり前か)。
postgres% cd DBD-Pg-1.21 ....(モジュールを展開したディレクトリに移動)
postgres% perl Makefile.PL
postgres% make
postgres% make test
.....やっとエラーでなくなった。わーい。
su - root
password:
root# make install
で、インストール成功です。
こうして書いてみると、ごくごく当たり前の手順のようで、どこでつまずいたのかはっきりしないのですが、今回の成功にあたって、過去の方法と大きくかわったのは、PGの./configureで、 --with-perl オプションをつけたことではなかったかと思います。
ひょっとしたら、不要の、場合によっては非推奨の設定やインストールを行っているところがあるかもしれませんが、さすがに「必要十分条件」を調べるのは辛いので、とりあえず「必要条件」のみの報告になります。

2003/02/07 23:33 Community User への返信

で、次のinitdbでロケールが日本語にセットできないようなエラーがでていたので、ターミナルで、
setenv LC_ALL C
setenv LANG
を設定。

2003/02/07 23:35 Community User への返信

>setenv LANG
>を設定。
setenv LANG C
です。(上のメッセージは不用意にエンターキーたたいたらはいっちゃいました)

2003/02/08 01:13 Community User への返信

なにはともあれよかったですね。
気が付いたところだけ、コメントしてみます。
> まず、readlineというライブラリが必要になります。
> またコンパイルには、通常のmakeではなく、gmake(GNU make)が必要になるということ。
> で、gmakeをインストールしたところ、コマンド名はmakeのままだったので、ひょっとしたら、最初からGNU makeだったかもしれません。
readline は、 psql のコマンドヒストリや、タブ補完のために必要で、なくても PostgreSQL は build できます。それから Mac OS X に最初から入っている make は GNU Make です?
bash-2.05a$ /usr/bin/make -v
GNU Make version 3.79, by Richard Stallman and Roland McGrath.
Built for powerpc-apple-darwin6.0
...
...
LOCALE を疑ってらっしゃる箇所は、ちょっとおや?と思いました。うちでは別になにも指定してません。ただ何がおや?なのかと具体的に言える知識もないのですが、気になりました(だったら喋るなと突っ込まれそうです)。
それから --with-perl ってなんだ?と思って簡単な説明を見ると、"build Perl modules (PL/Perl)" 。PL/Perl って何?と思いマニュアルを見ると「 PL/Perl を使うと、あたかも Postgres に組み込まれているかのように Perl プログラミング言語を使った SQL 問い合わせ関数の作成を行うことができます」。ということで DBI には関係ないです(それにうちでは --with-perl してませんから)。
続けて読むと、「 PL/Perl では、Perl の libperl ライブラリが共用オブジェクトとしてビルドされている必要があります。現時点では、OS に予め備わっている Perl パッケージのほとんどは、このようになっていません」。面白そうですが、めんどくさそうですね :-p
# dyld のエラーに関係あるのかなぁと安直に想像してみたので、ちょっと加筆してみました。私も dyld 関連は解りまへん。

2003/02/08 06:30 Community User への返信

ありがとうございます。
では次にインストールする機会があれば(会社でテストサーバーとして使ってる初代iMacに近々インストール予定)、ご指摘の
箇所を外した手順でやってみます。
ともあれ、これでやっと、買ってきた参考書の内容の勉強に移っていけます。

2003/02/12 14:19 Community User への返信

日本語を常用されるのであれば、データベースのエンコーディングはともかくとして、initdb に --no-locale オプションをつけておかないと、ソートなどで不具合が出ることがあるそうです。

このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

DBI,DBD(Perlのモジュール)インストールできず

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。