mysql2 gem fails to compile with MySQL 5.6.12 on OS X with Homebrew
Solution 1
I had the same problem, I managed to fix it. I did a lot of things, and I don't know for sure what it was, but going to MySQL 5.6.10 seems to have worked.
Uninstall MySQL 5.6.12:
brew unlink mysql
brew uninstall mysql
Go to the homebrew directory:
cd /usr/local
Go to version 5.6.10 (you can find a list of versions by running brew versions mysql
:
git checkout 48f7e86 Library/Formula/mysql.rb
Then install mysql again:
brew install mysql
And now gem install mysql2
works for me.
I've also installed mysql from source (brew install mysql --build-from-source
), but that didn't solve it, but might be part of the solution.
Solution 2
just ;)
gem install mysql2 -- --with-mysql-config=/usr/local/Cellar/mysql/5.6.10/bin/mysql_config
Solution 3
This also seemed to work for me. It forces the gem to compile against 5.6.10.
bundle config build.mysql2 --with-mysql-config=/usr/local/Cellar/mysql/5.6.10/bin/mysql_config
Related answer: https://stackoverflow.com/a/9360181
Solution 4
The top answer here is out-of-date... the brewers have fixed mysql:
brew update
brew upgrade mysql
gem install mysql2
This will update mysql to the latest version, which seems to work fine with the mysql2 gem on OSX.
Solution 5
I had to specify the ldflags
and cppflags
for it to compile correctly, like this:
gem install mysql2 -v '0.5.2' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include
pupeno
You can find my blog at https://pupeno.com where I publish about coding and other stuff.
Updated on November 06, 2020Comments
-
pupeno over 3 years
I updated all the packages I installed with Homebrew. MySQL got upgraded to 5.6.12 (from 5.5.27 or so):
$ mysql --version mysql Ver 14.14 Distrib 5.6.12, for osx10.8 (x86_64) using EditLine wrapper
and now the mysql2 gem doesn't compile anymore:
$ gem install mysql2 Building native extensions. This could take a while... ERROR: Error installing mysql2: ERROR: Failed to build gem native extension. /Users/pupeno/.rvm/rubies/ruby-1.9.3-p429-perf/bin/ruby extconf.rb checking for rb_thread_blocking_region()... yes checking for rb_wait_for_single_fd()... yes checking for mysql.h... no checking for mysql/mysql.h... no ----- mysql.h is missing. please check your installation of mysql and try again. ----- *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options. Provided configuration options: --with-opt-dir --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=/Users/pupeno/.rvm/rubies/ruby-1.9.3-p429-perf/bin/ruby --with-mysql-config --without-mysql-config
The file
mysql.h
is present in/usr/local/Cellar/mysql/5.6.12/include/mysql.h
. Any ideas what's going on?The file
mysql.h
doesn't appear in/usr/local
because the symlink seems to go deeper than it should:$ ls -la /usr/local/include/mysql lrwxr-xr-x 1 pupeno admin 36 21 Jun 15:18 /usr/local/include/mysql@ -> ../Cellar/mysql/5.6.12/include/mysql
instead of
/usr/local/Cellar/mysql/5.6.12/include
Having said that, I manually fixed the symlink and the compilation still failed. So I'm stuck.
-
B. Ruschill almost 11 yearsiain's answer solved it for me. In homebrew 0.9.4 (not sure about other versions) you can use
brew pin mysql
after downgrading to 5.6.10, and that will prevent it from getting upgraded if you usebrew upgrade
regularly. -
Jan almost 11 yearsThis will only work if there actually is a mysql 5.6.10 installed at that path.
-
sborsje almost 11 yearsWorks like a charm! :)
-
stockli over 10 yearsIf you do a brew uninstall does that dump your datadir? I wasn't sure, so in my case I used
brew switch
to change back to my old mysql version I already had installed, as the upgrade to the latest version wasn't critical for me. -
Zachary Abresch over 10 yearsWorked like a charm! Thanks mate.
-
Chris Bloom over 9 yearsWorked great! Just need to make sure the path points to the version of MySQL that's installed. (In my case, I needed to compile against 5.1)
-
Yuki Matsukura over 9 yearsThis rewrites
~/.bundle/config
. -
subelsky over 4 yearsthis was the only thing that worked for me in Jan 2020; note that the flags he indicates are listed when you run "brew info [email protected]"
-
spume about 4 yearsThis was the only thing that worked for me too, possibly since upgrading to openssl 1.1
gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include
-
jmoon90 almost 4 yearsthis solved my
ld: library not found for -lssl clang: error: linker command failed with exit code 1 (use -v to see invocation)
mysql2 error