Rails 3.2.3 MySQL 5.5.1 Mysql2 gem安装失败,出现ld不兼容错误。

3
我有一个干净的构建系统,如下所示:
Ubuntu 11.04
Rvm 1.13.5
Ruby 1.9.3p194
Rails 3.2.3
Gem 1.8.24
MySql 5.5.24-1(安装在 /usr/local)
我正在尝试安装 mysql2 gem(0.3.11),但遇到以下问题:
 pal@smurf01:~$ sudo gem install mysql2
   [sudo] password for pal: 
   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.3-p194/bin/ruby extconf.rb
   checking for rb_thread_blocking_region()... yes
   checking for rb_wait_for_single_fd()... yes
   checking for mysql.h... yes
   checking for errmsg.h... yes
   checking for mysqld_error.h... yes
   creating Makefile

   make
   compiling client.c
   client.c: In function 'rb_raise_mysql2_error':
   client.c:98:3: warning: ISO C90 forbids mixed declarations and code
   client.c: In function 'rb_mysql_client_socket':
   client.c:590:3: warning: ISO C90 forbids mixed declarations and code
   compiling mysql2_ext.c
   compiling result.c
   linking shared-object mysql2/mysql2.so
   /usr/bin/ld: skipping incompatible /usr/local/mysql/lib/libmysqlclient_r.so when searching for -lmysqlclient_r
   /usr/bin/ld: skipping incompatible /usr/local/mysql/lib/libmysqlclient_r.a when searching for -lmysqlclient_r
   /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.3-p194/gems/mysql2-0.3.11 for inspection.
   Results logged to /usr/local/rvm/gems/ruby-1.9.3-p194/gems/mysql2-0.3.11/ext/mysql2/gem_make.out
 pal@smurf01:~$

第一个问题:有人在Ubuntu上使用MySql 5.5.1成功运行Rails mysql2吗?我已经在另一个系统上使用了5.1。gem的说明模糊地提到了支持的MySql版本。
第二个问题:有人遇到过这个问题吗?我在过去一年左右与mysql2 gem的各种库问题作斗争,但这似乎是不同的问题。
非常感谢您的帮助。
顺便说一下:退回到MySql 5.1是有效的解决方案!
敬礼
彼得
4个回答

14
或者只需运行apt-get install libmysqlclient-dev,然后再运行gem install mysql2

2

问题似乎是由于缺少库和一些链接导致的。按照以下步骤解决该问题:

获取并安装由Nathan Rennie Waldock提供的libmysqlclient-dev deb软件包。

 wget http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/pool/main/m/mysql-5.5/libmysqlclient-dev_5.5.24-1~ppa1~natty_amd64.deb./;l
 dpkg -i libmysqlclient-dev_5.5.24-1~ppa1~natty_amd64.deb

然后创建一些链接,因为mysql2似乎无法跟随mysql路径。
cd /usr/lib/
ln -s /usr/local/mysql-5.5.24-linux2.6-x86_64/lib/libmysqlclient_r.a .
ln -s /usr/local/mysql-5.5.24-linux2.6-x86_64/lib/libmysqlclient_r.so .
ln -s /usr/local/mysql-5.5.24-linux2.6-x86_64/lib/libmysqlclient_r.so.18 .
ln -s /usr/local/mysql-5.5.24-linux2.6-x86_64/lib/libmysqlclient_r.so.18.0.0 .

现在请愉快地安装mysql2 gem。
sudo gem install mysql2
  Fetching: mysql2-0.3.11.gem (100%)
  Building native extensions.  This could take a while...
  Successfully installed mysql2-0.3.11
  1 gem installed
  Installing ri documentation for mysq2l-0.3.11...
  Installing RDoc documentation for mysql2-0.3.11...

我使用的是旧版本的OpenSuSE,将我的libmysqlclient_r文件手动链接到/usr/lib目录中解决了我的问题。 - Matt Zukowski

0

在Ubuntu 12.04中,我遇到了与已接受答案中提到的ppa相同的问题。但是,在我的系统中,没有带有_r后缀的libmysqlclient文件。通过谷歌搜索,我发现软件包构建者已经开始从文件名中删除_r后缀,所以这可能发生在11.10和12.04之间。

此外,路径与提到的路径略有不同,因此这些是我必须创建的符号链接:

ln -s /usr/lib/x86_64-linux-gnu/libmysqlclient.a ./libmysqlclient_r.a
ln -s /usr/lib/x86_64-linux-gnu/libmysqlclient.so ./libmysqlclient_r.so
ln -s /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18 ./libmysqlclient_r.so.18
ln -s /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0 ./libmysqlclient_r.so.18.0.0

0

我也遇到了这个问题...

当我尝试执行apt-get install libmysqlclient-dev时,我得到了一个错误,因此我执行了dpkg -r mysql-devel

正在解包 libmysqlclient-dev(来自.../libmysqlclient-dev_5.5.24-0ubuntu0.12.04.1_i386.deb)...... dpkg:错误处理 /var/cache/apt/archives/libmysqlclient-dev_5.5.24-0ubuntu0.12.04.1_i386.deb (--unpack): 尝试覆盖 '/usr/bin/mysql_config',它也在包 mysql-devel 5.5.28-2 中

执行完上述操作后,gem install mysql2就可以工作了!太好了 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接