Back at the start of April I wrote mysql2 ruby gem and Mac OS X: image not found to deal with the extremely relative path to
libmysqlclient.16.dylib. I had said I would prefer not putting
/usr/lib but I couldn't find a dylib path that ruby uses. That is until today when I decided to try again.
RbConfig::CONFIG which is the directory where ruby can load dylib files from.
libexecdir=$(ruby -rrbconfig -e 'puts RbConfig::CONFIG["libexecdir"]')
sudo mkdir -p $libexecdir
sudo ln -s /usr/local/mysql/lib/libmysqlclient.16.dylib $libexecdir
Now ruby can load
libmysqlclient.16.dylib without putting it in
I forgot to mention it in the first post but if your ruby wants
libmysqlclient.18.dylib, just replace the 16 with 18. Same with any other number.
If you are using the mysql2 ruby gem on Mac OS X you may have run into this problem before.
> require 'mysql2'
LoadError: dlopen(mysql2-0.2.7/lib/mysql2/mysql2.bundle, 9):
Library not loaded: libmysqlclient.16.dylib
Referenced from: mysql2-0.2.7/lib/mysql2/mysql2.bundle
Reason: image not found - mysql2-0.2.7/lib/mysql2/mysql2.bundle
So far the only solution I have found online is to use
install_name_tool to update the (extremely) relative
libmysqlclient.16.dylib reference to be absolute (usually to
While this solves the problem, it only works until you reinstall the mysql2 gem or install a newer version and then you have to do it again. To permanently solve it you need to create a symlink of
/usr/lib so that it can be found with that default relative path.
Ideally you wouldn't put it in
/usr/lib but I haven't be able to find a path inside of ruby that will let you load the
sudo ln -s /usr/local/mysql/lib/libmysqlclient.16.dylib /usr/lib
Enter your password and then you can use the
mysql2 gem without needing to edit the compiled bundle afterwards.