DBD::mysql動くまでにハマったこと
DBD::mysqlが無いと怒られたので、そういえば入れてなかったわー
cpanfileに追記するだけの簡単なお仕事だなーって思ったけど、
予想外にハマったのでメモ。
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^)\