itochin2の日記(仮)

主に備忘録。Perl、MySQL、Unity、開発管理などについて情報を残していきたい。

DBD::mysql動くまでにハマったこと

DBD::mysqlが無いと怒られたので、そういえば入れてなかったわー
cpanfileに追記するだけの簡単なお仕事だなーって思ったけど、
予想外にハマったのでメモ。

環境

centos 6.4
mysql 5.6

carton installでエラー

build.logにはこんなエラーがあった。
/usr/bin/ld: cannot find -lmysqlclient

mysqlclientライブラリがないと言っている。
入っていない場合、MySQL-develを入れることで解決するけど、入れた気がする。

MySQL-develの存在を確認してみる。

# rpm -qa | grep MySQL
MySQL-server-5.6.15-1.linux_glibc2.5.x86_64
MySQL-devel-5.6.15-1.linux_glibc2.5.x86_64
MySQL-shared-compat-5.6.15-1.linux_glibc2.5.x86_64
MySQL-client-5.6.15-1.linux_glibc2.5.x86_64

やっぱりあった。

ライブラリのパスを確認してみる。

# mysql_config --libs
-L/usr/lib64 -lmysqlclient -llpthread -lm -lrt -ldl

/usr/lib64にはlibmysqlclient.soがなかった。
これはだめだ。

mysqlclientのシンボリックリンク作った。

# cd /usr/lib64
# ln -s /usr/lib64/mysql/libmysqlclient.a .

.soじゃなく.aでもOK。
http://perldoc.jp/docs/modules/DBD-mysql-2.1026/DBD/mysql/INSTALL.pod#12522-12531-12459-12540-12539-12501-12521-12464

ldconfigも修正した。

# echo '/usr/lib64' > /etc/ld.so.conf.d/usr-lib64.conf
# ldconfig

これで、mysqlclientを見れるはず!

carton installは問題なく成功した。

アプリ動かしたらエラー

failed: Can't load '/xxx/mysql.so' for module DBD::mysql: /xxx/mysql.so: undefined symbol: __cxa_pure_virtual at ...

mysql.soがロードできないって言ってるけど、ちゃんと存在はしている。
どうやら、MySQL-sharedを入れないとダメらしい。
入れた気がするけど確認してみる。

# rpm -qa | grep MySQL
MySQL-server-5.6.15-1.linux_glibc2.5.x86_64
MySQL-devel-5.6.15-1.linux_glibc2.5.x86_64
MySQL-shared-compat-5.6.15-1.linux_glibc2.5.x86_64
MySQL-client-5.6.15-1.linux_glibc2.5.x86_64

compatの方しか入ってない/(^o^)\

一度mysqlを停止してぶっこむ。

# /etc/init.d/mysql stop
# rpm -Uvh MySQL-shared-5.6.16-1.linux_glibc2.5.x86_64.rpm
# /etc/init.d/mysql start

これで問題なく動いた。
なんか、MySQL-sharedを入れていれば、DBD::mysqlのインストールにも
はまらなかったんじゃっていう予感もする(確証なし

ミドルウェアの知識が低すぎて辛い。