意識低いエンジニアの一念発起ブログ

意識低くたってたまにはブログだって書くんだ。

RMySQLのインストールに失敗する件

64bit MacOSX(Marvericks)に64bitのR入れて

> install.packages('RMySQL')

これをすると以下のエラーに見舞われた。

installing to /usr/local/Cellar/r/3.0.2/R.framework/Versions/3.0/Resources/library/RMySQL/libs
** R
** inst
** preparing package for lazy loading
Creating a generic function for ‘format’ from package ‘base’ in package ‘RMySQL’
Creating a generic function for ‘print’ from package ‘base’ in package ‘RMySQL’
** help
*** installing help indices
** building package indices
** installing vignettes
** testing if installed package can be loaded
Error : .onLoad failed in loadNamespace() for 'RMySQL', details:
  call: dyn.load(file, DLLpath = DLLpath, ...)
  error:  共有ライブラリ '/usr/local/Cellar/r/3.0.2/R.framework/Versions/3.0/Resources/library/RMySQL/libs/RMySQL.so' を読み込めません: 
  dlopen(/usr/local/Cellar/r/3.0.2/R.framework/Versions/3.0/Resources/library/RMySQL/libs/RMySQL.so, 6): Symbol not found: _mysql_affected_rows
  Referenced from: /usr/local/Cellar/r/3.0.2/R.framework/Versions/3.0/Resources/library/RMySQL/libs/RMySQL.so
  Expected in: flat namespace
 in /usr/local/Cellar/r/3.0.2/R.framework/Versions/3.0/Resources/library/RMySQL/libs/RMySQL.so 
 エラー:  ロードに失敗しました 
 実行が停止されました 
ERROR: loading failed
* removing ‘/usr/local/Cellar/r/3.0.2/R.framework/Versions/3.0/Resources/library/RMySQL’

対処法として、cranのサイトから直接RMySQLをダウンロードしたソースを使ったらうまくいきました。
以下のサイトから最新のRMySQLのソースをダウンロードしましょう。
http://cran.r-project.org/bin/macosx/contrib/

RMySQLのインストールの下準備に$MYSQL_HOMEを設定します。~/.zshrc (.bashrc)などにいれといてもいいでしょう。

% export $MYSQL_HOME=/usr/local/opt/mysql

(ちなみにMySQLのインストールにはbrewを使っています。 "/usr/local/opt/mysql"はmysqlのhomeディレクトリを向くシンボリックリンクになっているので、バージョン番号が入った絶対パスなど使わず、そちらを利用しましょう。)

上記RMySQL〜〜.tgzを保存した場所で以下を実行

% R CMD INSTALL --configure-args="--with-mysql-dir=$MYSQL_HOME --with-mysql-inc=$MYSQL_HOME/include --with-mysql-lib=$MYSQL_HOME/lib" RMySQL_0.9-3.tgz  
* installing to library ‘/usr/local/Cellar/r/3.0.2/R.framework/Versions/3.0/Resources/library’
* installing *binary* package ‘RMySQL’ ...
* DONE (RMySQL)

このように出力されて成功しました。

install.packages('RMySQL')でダウンロードしてくるソースとは相性がよろしくなかったようです。