tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

【perl】cpanmでDBD::mysql入れようとすると`Installing DBD::mysql failed`と表示されるエラーの解消

はじめに

perlbrew x cpanm x あとはいろいろな構成でアプリを作っていたのですが、
DBD::mysqlを入れようとするとこんなエラーがでるときがあります。

! Installing DBD::mysql failed. See /home/hoge/.cpanm/work/1436686165.21154/build.log for details. Retry with --force to force install it.

そんなときの対処法。

エラーを見てみる

$ cpanm DBD::mysql
--> Working on DBD::mysql
Fetching http://www.cpan.org/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.031.tar.gz ... OK
Configuring DBD-mysql-4.031 ... OK
Building and testing DBD-mysql-4.031 ... FAIL
! Installing DBD::mysql failed. See /home/hoge/.cpanm/work/1436686165.21154/build.log for details. Retry with --force to force install it.

対処してみる

昔に対処した記憶があったので、下記サイトを参考に対処してみることに。

標準Perl+CPANから、Perlbrew+cpanmへ乗り換え

しかし、/home/hoge/.cpanm/work/1436686010.20691/DBD-mysql-4.031/mysql.xs
該当行を見てみたところすでにパッチがあてられているようです。

DBD-mysql-4.031ではすでに上記の問題は解消すみのようですね。

別の対処方法を探す

しかしながらエラーの詳細を追うために
上記参考リンクの手順のとおりperl Makefile.PLのあとにmakeをしてみるとエラー出力が多発します。

$ make
cc -c  -I/home/hoge/perl5/perlbrew/perls/perl-5.16.3/lib/site_perl/5.16.3/x86_64-linux/auto/DBI -I/usr/include/mysql -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -fPIC  -g -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing -DMY_PTHREAD_FASTMUTEX=1 -DDBD_MYSQL_INSERT_ID_IS_GOOD -g  -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2   -DVERSION=\"4.031\" -DXS_VERSION=\"4.031\" -fPIC "-I/home/hoge/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/x86_64-linux/CORE"   dbdimp.c
In file included from dbdimp.c:20:
dbdimp.h:21:49: error: mysql.h: No such file or directory
dbdimp.h:22:45: error: mysqld_error.h: No such file or directory
dbdimp.h:24:49: error: errmsg.h: No such file or directory
In file included from dbdimp.c:20:
dbdimp.h:172: error: expected specifier-qualifier-list before 'MYSQL'
dbdimp.h:271: error: expected specifier-qualifier-list before 'MYSQL_RES'
In file included from dbdimp.c:20:
dbdimp.h:332: error: expected ')' before '*' token
dbdimp.h:335: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'mysql_st_internal_execute'
dbdimp.h:371: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
・・・省略・・・

最初のエラーmysql.h: No such file or directoryが特に怪しいので
そちらで調べてみたらありました。

DBD::mysqlがインストールできない

ヘッダファイルがインストールされていなかった?らしい。ってとこですね。

対処する

対処するといってもmysql-develをいれただけで終わりでしたー

$ sudo yum install mysql-devel

$ cpanm DBD::mysql
--> Working on DBD::mysql
Fetching http://www.cpan.org/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.031.tar.gz ... OK
Configuring DBD-mysql-4.031 ... OK
Building and testing DBD-mysql-4.031 ... OK
Successfully installed DBD-mysql-4.031
1 distribution installed

おわり

mysql-devel入れて無いとかかなり初歩的なことに思えても
動いてるほうは昔一度入れたっきり覚えてないので新たに環境を作るときは毎回つまづきますね(><)