• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:DBD::mysqlのmake testでエラーが発生)

DBD::mysqlのmake testでエラーが発生

このQ&Aのポイント
  • DBD::mysqlのmake testでエラーが発生し、解決方法がわからない状況です。
  • OSはSolaris10(SPARC)で、PerlやDBI/DBDのバージョンは下記のログのとおりです。
  • Googleで検索した対処法を試しましたが、どれも解決できず困っています。

質問者が選んだベストアンサー

  • ベストアンサー
noname#227025
noname#227025
回答No.3

> これはperlが32ビットで、mysqlが64ビットだからでしょうか…。 その通りです。 >これを対処するには、32ビット版のmysqlを入れるべきか、それとも、64ビット版のperlを入れるべきなのでしょうか? > mysqlには、32ビット版が用意されてましたが、perlのモジュールにそこまで種類分けがされてなかった記憶があります。みなさんはどうやってるのでしょうか? > > ちなみに、perlは、perl-5.8.8-sol10-sparc-localを、mysqlは、mysql-5.1.34-solaris10-sparc-64bitをpkgaddして、インストールしてます。 32bit or 64bit の選択は場合によります。 64bit のアドレス空間が必要な場合は、perl を自前で 64bit バイナリとしてコンパイル & インストールする必要があると思います。 64bit のアドレス空間が必要でないなら、32bit 版の MySQL を入れなおせばよいでしょう。 私の場合 32bit で事足りているので、32bit 版の MySQL をインストールしています。

okaponyo
質問者

お礼

このあと、MySQLを32ビット版に再インストールし(32ビットで充分でありました)、再度、DBDをインストールしてみたところ、問題なくテストを通過し、インストールすることができました! 今週ほとんどこれに時間を費やしてましたので、 「All tests successful」 と表示されたのを見ると泣きそうになりました。 ここまで導いていただいて、まことにありがとうございました。 感謝いたします。

その他の回答 (2)

noname#227025
noname#227025
回答No.2

> # ldd blib/arch/auto/DBD/mysql/mysql.so > libmysqlclient.so.12 => /usr/sfw/lib/libmysqlclient.so.12 ..snip.. > この結果、気になることがございます。 > libmysqlclient.so.12が、バンドルされているほうのmysqlのライブラリ(/usr/sfw/lib)を指しており、また、新規でインストールしたmysqlのディレクトリ(/opt/mysql/mysql)には、libmy~.so.12は存在しなくて、 libmy~.so.16が存在しております。 > >このあたりの不整合が原因なのでしょうか? そのようですね。 OS バンドルの方のライブラリをリンクしてしまい、多分そちらにはシンボル mysql_sqlstate が無いのですね。 特に必要が無ければ OS バンドルの MySQL は pkgrm で削除してしまったほうがよいと思います。 また、OS バンドルの MySQL を削除した場合も -R は必要かと思います。

okaponyo
質問者

補足

バンドルされている、3つのパッケージを全て削除し、再度、-Rをつけてmakefile⇒makeしたところ、make時点で下記のエラーが発生してしまいました。 ----- ld: 重大なエラー: ファイル /opt/mysql/mysql/lib/libmysqlclient.so: ELF クラスが正しくありません: ELFCLASS64 ld: 重大なエラー: ファイル処理エラー。blib/arch/auto/DBD/mysql/mysql.so へ書き込まれる出力がありません。 ----- これはperlが32ビットで、mysqlが64ビットだからでしょうか…。 これを対処するには、32ビット版のmysqlを入れるべきか、それとも、64ビット版のperlを入れるべきなのでしょうか? mysqlには、32ビット版が用意されてましたが、perlのモジュールにそこまで種類分けがされてなかった記憶があります。みなさんはどうやってるのでしょうか? ちなみに、perlは、perl-5.8.8-sol10-sparc-localを、mysqlは、mysql-5.1.34-solaris10-sparc-64bitをpkgaddして、インストールしてます。

noname#227025
noname#227025
回答No.1

> # Error: Can't load '/export/home/ryutsu/DBD-mysql-4.011/blib/arch/auto/DBD/mysql/mysql.so' for module DBD::mysql: ld.so.1: perl: 重大なエラー: 再配置エラー: ファイル /export/home/ryutsu/DBD-mysql-4.011/blib/arch/auto/DBD/mysql/mysql.so: シンボル mysql_sqlstate: 参照シンボルが見つかりません。 at /usr/local/lib/perl5/5.8.8/sun4-solaris/DynaLoader.pm line 230. 上記のエラーメッセージから、mysql.so においてリンカが mysql のライブラリを見つけられないためだと思います。 % ldd /export/home/ryutsu/DBD-mysql-4.011/blib/arch/auto/DBD/mysql/mysql.so の実行結果はどうなりますか? おそらく perl Makefile.pl する際、以下のように libs に -R/opt/mysql/mysql/lib を追加すればよいと思います。 % perl Makefile.PL --cflags='-I/opt/mysql/mysql/include -g -DHAVE_RWLOCK_T -DUNIV_SOLARIS' --libs='-L/opt/mysql/mysql/lib -R/opt/mysql/mysql/lib -lmysqlclient -lz -lposix4 -lresolv -lsocket -lnsl -lm'

okaponyo
質問者

補足

ご回答ありがとうございます。 -Rを試してみましたが、事象は変わらずでした。 ちなみに、lddの結果は、下記のとおりです。 ----- # ldd blib/arch/auto/DBD/mysql/mysql.so libmysqlclient.so.12 => /usr/sfw/lib/libmysqlclient.so.12 librt.so.1 => /lib/librt.so.1 libresolv.so.2 => /lib/libresolv.so.2 libsocket.so.1 => /lib/libsocket.so.1 libnsl.so.1 => /lib/libnsl.so.1 libm.so.2 => /lib/libm.so.2 libc.so.1 => /lib/libc.so.1 libz.so.1 => /usr/lib/libz.so.1 libcrypt_i.so.1 => /usr/lib/libcrypt_i.so.1 libgen.so.1 => /lib/libgen.so.1 libaio.so.1 => /lib/libaio.so.1 libmd.so.1 => /lib/libmd.so.1 libmp.so.2 => /lib/libmp.so.2 libscf.so.1 => /lib/libscf.so.1 libdoor.so.1 => /lib/libdoor.so.1 libuutil.so.1 => /lib/libuutil.so.1 /platform/SUNW,SPARC-Enterprise-T2000/lib/libc_psr.so.1 /platform/SUNW,SPARC-Enterprise-T2000/lib/libmd_psr.so.1 ----- この結果、気になることがございます。 libmysqlclient.so.12が、バンドルされているほうのmysqlのライブラリ(/usr/sfw/lib)を指しており、また、新規でインストールしたmysqlのディレクトリ(/opt/mysql/mysql)には、libmy~.so.12は存在しなくて、libmy~.so.16が存在しております。 このあたりの不整合が原因なのでしょうか?

関連するQ&A