7

I got this "popular" error while installing mysql2 gem on Debian Squeeze:

gem install mysql2
Building native extensions.  This could take a while...
ERROR:  Error installing mysql2:
    ERROR: Failed to build gem native extension.

        /usr/local/rvm/rubies/ruby-1.9.2-p290/bin/ruby extconf.rb
checking for rb_thread_blocking_region()... yes
checking for rb_wait_for_single_fd()... no
checking for mysql.h... yes
checking for errmsg.h... yes
checking for mysqld_error.h... yes
creating Makefile

make
gcc -I. -I/usr/local/rvm/rubies/ruby-1.9.2-p290/include/ruby-1.9.1/i686-linux -I/usr/local/rvm/rubies/ruby-1.9.2-p290/include/ruby-1.9.1/ruby/backward -I/usr/local/rvm/rubies/ruby-1.9.2-p290/include/ruby-1.9.1 -I. -DHAVE_RB_THREAD_BLOCKING_REGION -DHAVE_MYSQL_H -DHAVE_ERRMSG_H -DHAVE_MYSQLD_ERROR_H  -D_FILE_OFFSET_BITS=64  -I/usr/include/mysql -DBIG_JOINS=1  -fno-strict-aliasing  -g -fPIC -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings -Wno-missing-field-initializers -Wno-long-long  -fPIC -Wall -funroll-loops  -o client.o -c client.c
gcc -I. -I/usr/local/rvm/rubies/ruby-1.9.2-p290/include/ruby-1.9.1/i686-linux -I/usr/local/rvm/rubies/ruby-1.9.2-p290/include/ruby-1.9.1/ruby/backward -I/usr/local/rvm/rubies/ruby-1.9.2-p290/include/ruby-1.9.1 -I. -DHAVE_RB_THREAD_BLOCKING_REGION -DHAVE_MYSQL_H -DHAVE_ERRMSG_H -DHAVE_MYSQLD_ERROR_H  -D_FILE_OFFSET_BITS=64  -I/usr/include/mysql -DBIG_JOINS=1  -fno-strict-aliasing  -g -fPIC -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings -Wno-missing-field-initializers -Wno-long-long  -fPIC -Wall -funroll-loops  -o mysql2_ext.o -c mysql2_ext.c
gcc -I. -I/usr/local/rvm/rubies/ruby-1.9.2-p290/include/ruby-1.9.1/i686-linux -I/usr/local/rvm/rubies/ruby-1.9.2-p290/include/ruby-1.9.1/ruby/backward -I/usr/local/rvm/rubies/ruby-1.9.2-p290/include/ruby-1.9.1 -I. -DHAVE_RB_THREAD_BLOCKING_REGION -DHAVE_MYSQL_H -DHAVE_ERRMSG_H -DHAVE_MYSQLD_ERROR_H  -D_FILE_OFFSET_BITS=64  -I/usr/include/mysql -DBIG_JOINS=1  -fno-strict-aliasing  -g -fPIC -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings -Wno-missing-field-initializers -Wno-long-long  -fPIC -Wall -funroll-loops  -o result.o -c result.c
result.c: In function ‘rb_mysql_result_fetch_fields’:
result.c:381: warning: comparison between signed and unsigned integer expressions
gcc -shared -o mysql2.so client.o mysql2_ext.o result.o -L. -L/usr/local/rvm/rubies/ruby-1.9.2-p290/lib -Wl,-R/usr/local/rvm/rubies/ruby-1.9.2-p290/lib -L.  -rdynamic -Wl,-export-dynamic -Wl,-rpath,/usr/lib   -Wl,-R -Wl,/usr/local/rvm/rubies/ruby-1.9.2-p290/lib -L/usr/local/rvm/rubies/ruby-1.9.2-p290/lib -lruby -L/usr/lib -lmysqlclient_r -lpthread -lz -lm -lrt -lssl -lcrypto -ldl  -lpthread -lrt -ldl -lcrypt -lm   -lc
/usr/bin/ld: cannot find -lmysqlclient_r
collect2: ld returned 1 exit status
make: *** [mysql2.so] Error 1


Gem files will remain installed in /usr/local/rvm/gems/ruby-1.9.2-p290/gems/mysql2-0.3.11 for inspection.
Results logged to /usr/local/rvm/gems/ruby-1.9.2-p290/gems/mysql2-0.3.11/ext/mysql2/gem_make.out

There are a lot of search results at stack overflow but none of them would fix my Problem.

libmysqlclient-dev - MySQL database development files
libmysqlclient18 - MySQL database client library

are installed via dot deb repo.

mysql-server is installed, too.

The following files related to libmysqlclient could be found at /usr/lib

/usr/lib/libmysqlclient.so.18
/usr/lib/libmysqlclient_r
/usr/lib/libmysqlclient.so
/usr/lib/libmysqlclient.so.16.0.0
/usr/lib/libmysqlclient.a
/usr/lib/libmysqlclient_r.so.16
/usr/lib/libmysqlclient.so.16
/usr/lib/libmysqlclient.so.18.0.0
/usr/lib/libmysqlclient_r.so.16.0.0
Jonathan Hall
  • 75,165
  • 16
  • 143
  • 189
PascalTurbo
  • 2,189
  • 3
  • 24
  • 41
  • 1
    It is presumably looking in the wrong place for `libmysqlclient`. Is there some place in the build config you can customize this? Also, it would help if you could indicate where you are downloading your source from, then maybe the error can be reproduced. – Faheem Mitha Dec 17 '11 at 21:56
  • Thanks for mentioning `libmysqlclient-dev`, that solved my problem – Pierre de LESPINAY Mar 18 '13 at 09:35

2 Answers2

24

It seems the the problem with the native extensions is the lack of the header files (.h) They are typically found in the -dev libraries

sudo apt-get install libmysqlclient-dev

gem install mysql2

solves the problem for Debian/Ubuntu.

Tombart
  • 30,520
  • 16
  • 123
  • 136
Sergiu
  • 266
  • 3
  • 3
0

This helped me in Debian 11

apt-get install ruby-dev libmariadbclient-dev
jmoerdyk
  • 5,544
  • 7
  • 38
  • 49