Cannot install mysql2 gem
mysql, mysql2, ruby, ruby-on-rails, rubygems
Solution
I finally solved it:
- Downloaded and installed MySQL 64bit version 5.5
- Downloaded the zip archive for the 32bit version 5.5.
- Extracted the 32-bit include and lib folders to `C:\MySQL`.
- Installed Ruby 1.9.2.
- Installed the Ruby Devkit.
- Installed the gems:
- `gem install mysql`
- `gem install mysql2 -- --with-mysql-lib=C:\MySQL\lib --with-mysql-include=C:\MySQL\include`
- `gem install rails`
- `gem install fastthread`
- `gem install haml`
It's working as a charm now. It seems the MySQL gem has issues finding the data when dealing with 64-bit.
Problem
I'm unable to install the mysql2 gem in my Windows7 x64 system. I tried using both the 32-bit and 64-bit versions of MySQL server but none got me any further. I installed Ruby 1.8, the development kit and and the Rails platform. I even installed minGW to allow C++/C compilation of things. MySQL Server was installed in the default location. When running the command: ``` C:\Users\Arne>gem install mysql2 -- --with-mysql-include="C:\Program Files (x86)\MySQL\MySQL Server 5.1\include" --with-mysql-lib="C:\Program Files (x86)\MySQL\MySQL Server 5.1\lib\" ``` I receive the following output from the console: ``` Temporarily enhancing PATH to include DevKit... Building native extensions. This could take a while... *** 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 --without-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=C:/Ruby/bin/ruby --with-mysql-dir --without-mysql-dir --with-mysql-include=${mysql-dir}/include --with-mysql-lib=${mysql-dir}/lib --with-libmysqllib --without-libmysqllib ERROR: Error installing mysql2: ERROR: Failed to build gem native extension. C:/Ruby/bin/ruby.exe extconf.rb --with-mysql-include=C:\Program Files (x 86)\MySQL\MySQL Server 5.1\include --with-mysql-lib=C:\Program Files (x86)\MySQL \MySQL Server 5.1\lib" checking for rb_thread_blocking_region()... no checking for main() in -llibmysql... no Gem files will remain installed in C:/Ruby/lib/ruby/gems/1.8/gems/mysql2-0.3.2 f or inspection. Results logged to C:/Ruby/lib/ruby/gems/1.8/gems/mysql2-0.3.2/ext/mysql2/gem_mak e.out ``` The output of my environment according to Rubygems is: ``` C:\Users\Arne>gem env RubyGems Environment: - RUBYGEMS VERSION: 1.7.2 - RUBY VERSION: 1.8.7 (2011-02-18 patchlevel 334) [i386-mingw32] - INSTALLATION DIRECTORY: C:/Ruby/lib/ruby/gems/1.8 - RUBY EXECUTABLE: C:/Ruby/bin/ruby.exe - EXECUTABLE DIRECTORY: C:/Ruby/bin - RUBYGEMS PLATFORMS: - ruby - x86-mingw32 - GEM PATHS: - C:/Ruby/lib/ruby/gems/1.8 - C:/Users/Arne/.gem/ruby/1.8 - GEM CONFIGURATION: - :update_sources => true - :verbose => true - :benchmark => false - :backtrace => false - :bulk_threshold => 1000 - REMOTE SOURCES: - http://rubygems.org/ ``` The following gems have been installed on the system as well: ``` C:\Users\Arne>gem list --local *** LOCAL GEMS *** abstract (1.0.0) actionmailer (3.0.7) actionpack (3.0.7) activemodel (3.0.7) activerecord (3.0.7) activeresource (3.0.7) activesupport (3.0.7) arel (2.0.9) builder (3.0.0, 2.1.2) bundler (1.0.12) erubis (2.7.0, 2.6.6) fastthread (1.0.7) i18n (0.5.0) mail (2.3.0, 2.2.18) mime-types (1.16) mysql (2.8.1 x86-mingw32) polyglot (0.3.1) rack (1.2.2) rack-mount (0.7.2, 0.6.14) rack-test (0.5.7) rails (3.0.7) railties (3.0.7) rake (0.8.7) rdoc (3.5.3, 2.5.11) rdoc-data (2.5.3) rubygems-update (1.7.2) thor (0.14.6) treetop (1.4.9) tzinfo (0.3.27, 0.3.26) ``` I don't know what's missing or wrong, but the output files pointed to by the script contain the following data: mkmf.log: ``` have_func: checking for rb_thread_blocking_region()... -------------------- no "gcc -o conftest -I. -IC:/Ruby/lib/ruby/1.8/i386-mingw32 -I. -g -O2 -DFD_SETSIZE=256 conftest.c -L. -LC:/Ruby/lib -L. -lmsvcrt-ruby18-static -lshell32 -lws2_32 " conftest.c: In function 't': conftest.c:7:53: error: 'rb_thread_blocking_region' undeclared (first use in this function) conftest.c:7:53: note: each undeclared identifier is reported only once for each function it appears in checked program was: /* begin */ 1: #include <ws2tcpip.h> 2: #include <winsock2.h> 3: #include <windows.h> 4: 5: /*top*/ 6: int main() { return 0; } 7: int t() { void ((*volatile p)()); p = (void ((*)()))rb_thread_blocking_region; return 0; } /* end */ "gcc -o conftest -I. -IC:/Ruby/lib/ruby/1.8/i386-mingw32 -I. -g -O2 -DFD_SETSIZE=256 conftest.c -L. -LC:/Ruby/lib -L. -lmsvcrt-ruby18-static -lshell32 -lws2_32 " C:\Users\Arne\AppData\Local\Temp\ccCicaNu.o: In function `t': C:\Ruby\lib\ruby\gems\1.8\gems\mysql2-0.3.2\ext\mysql2/conftest.c:3: undefined reference to `rb_thread_blocking_region' collect2: ld returned 1 exit status checked program was: /* begin */ 1: /*top*/ 2: int main() { return 0; } 3: int t() { rb_thread_blocking_region(); return 0; } /* end */ -------------------- have_library: checking for main() in -llibmysql... -------------------- no "gcc -o conftest -I. -IC:/Ruby/lib/ruby/1.8/i386-mingw32 -I. -IC:\Program -g -O2 -DFD_SETSIZE=256 conftest.c -L. -LC:/Ruby/lib -LC:\Program -L. -lmsvcrt-ruby18-static -llibmysql -lshell32 -lws2_32 " c:/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../../mingw32/bin/ld.exe: cannot find -llibmysql collect2: ld returned 1 exit status checked program was: /* begin */ 1: #include <ws2tcpip.h> 2: #include <winsock2.h> 3: #include <windows.h> 4: 5: /*top*/ 6: int main() { return 0; } 7: int t() { void ((*volatile p)()); p = (void ((*)()))main; return 0; } /* end */ "gcc -o conftest -I. -IC:/Ruby/lib/ruby/1.8/i386-mingw32 -I. -IC:\Program -g -O2 -DFD_SETSIZE=256 conftest.c -L. -LC:/Ruby/lib -LC:\Program -L. -lmsvcrt-ruby18-static -llibmysql -lshell32 -lws2_32 " c:/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../../mingw32/bin/ld.exe: cannot find -llibmysql collect2: ld returned 1 exit status checked program was: /* begin */ 1: /*top*/ 2: int main() { return 0; } 3: int t() { main(); return 0; } /* end */ -------------------- ``` gem_make.out: ``` C:/Ruby/bin/ruby.exe extconf.rb --with-mysql-include=C:\Program Files (x86)\MySQL\MySQL Server 5.1\include --with-mysql-lib=C:\Program Files (x86)\MySQL\MySQL Server 5.1\lib" checking for rb_thread_blocking_region()... no checking for main() in -llibmysql... no ``` I hope someone can point what I'm doing wrong, or what is actually missing on my development system to get this gem properly installed and working.