无法安装 mysql2 gem
Posted
技术标签:
【中文标题】无法安装 mysql2 gem【英文标题】:Cannot install mysql2 gem 【发布时间】:2011-08-16 00:46:18 【问题描述】:我无法在我的 Windows7 x64 系统中安装 mysql2 gem。我尝试同时使用 32 位和 64 位版本的 MySQL 服务器,但都没有让我更进一步。
我安装了 Ruby 1.8、开发工具包和 Rails 平台。我什至安装了 minGW 来允许 C++/C 编译东西。 MySQL 服务器安装在默认位置。
运行命令时:
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\"
我从控制台收到以下输出:
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
我的环境根据Rubygems的输出是:
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/
系统上还安装了以下 gem:
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)
我不知道缺少什么或错误,但脚本指向的输出文件包含以下数据:
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
我希望有人能指出我做错了什么,或者我的开发系统中实际上缺少什么,以便正确安装和工作。
【问题讨论】:
【参考方案1】:我终于解决了:
-
已下载并安装 MySQL 64 位版本 5.5
已下载 32 位版本 5.5 的 zip 存档。
将 32 位 include 和 lib 文件夹提取到
C:\MySQL
。
已安装 Ruby 1.9.2。
安装了 Ruby Devkit。
安装了宝石:
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
它现在就像一个魅力。似乎 MySQL gem 在处理 64 位时无法找到数据。
【讨论】:
第 2 步和第 3 步对我来说也是关键。我正在运行 mingw32 窗口,我必须运行gem install mysql2 -- --with_mysql_lib=/c/MySQL/lib --with-mysql-include=/c/MySQL/include
感激不尽。拯救生命的帖子就在这里......如果我能多次投票,我真的会。
谢谢,它也对我有用。我所需要的只是第 7 步,我正在使用 RailsInstaller(包括 devkit)和标准 xampp。
我要补充一点,对于这些命令,使用 cmd.exe 而不是 powershell 可能会更好。由于某种原因,在 powershell gem 下不断抛出一个错误,说“无效选项”。
其实还是用git命令行或者msys命令行比较好,因为他们懂一些ls等命令,configure脚本经常用到。【参考方案2】:
这对我有用:Win7 64/MySQL 5.5 64-bit/Ruby 1.9.2:
-
下载libmysql.dll。
将上面的 libmysql.dll 复制到
C:\Ruby192\bin
AND C:\Ruby192\lib
,或者你的 lib 和 bin 所在的任何位置。
运行:
祝你好运。
【讨论】:
这值得一百万次 reddi... 我的意思是 slashdotters。 谢谢,必须这样做: gem install mysql2 -v 0.2.7 -- '--with-mysql-lib="c:\Program Files\MySQL\MySQL Server 5.5\lib" --with-mysql-include="c:\Program Files\MySQL\MySQL Server 5.5\include" --with-mysql-dir="c:\Program Files\MySQL\MySQL Server 5.5"' 必须使用特定的版本。 @Railslearner 我这样做了,但是当我执行bundle update
时,它会恢复到0.3.11
的版本。这种情况该如何处理?
优秀。也适用于 Win8/MySQL 5.6/Ruby 2.0。【参考方案3】:
如果仍然出现错误,请交叉检查安装步骤 -
http://rorguide.blogspot.com/2011/03/installing-mysql2-gem-on-ruby-192-and.html
大多数用户在执行上述步骤后都能够安装 mysql2 gem。
【讨论】:
【参考方案4】:我知道该线程与 Windows 有关,但我在 Linux 上搜索相同的问题并通过安装 lib“libmysqlclient-dev”修复它
【讨论】:
【参考方案5】:接受的答案对我不起作用,其他 2 也没有。但是,MG 对 Ritesh 链接的评论对我有用。我必须指定版本 0.2.6,并包含参数 --platform=ruby。 (注意:我还必须下载 MySQL 的“noinstall”版本才能获得 /lib/opt)
这是我在 Windows 上安装 gem 的方法
gem install mysql2 -v 0.2.6 -- --platform=ruby --with-mysql-lib=C:\Ruby192\MySQL\lib\opt --with-mysql-dir=C:\Ruby192\MySQL
【讨论】:
我不需要 lib/opt 来正确安装 mysql2 gem,也不需要指定平台。如果您从 minGW 或 git 控制台而不是默认的 Windows 控制台运行这些命令,也会有所帮助。 这是唯一对我有用的东西,不需要 platfor=ruby。我正在使用 Windows 7【参考方案6】:我在 64 位 Windows 7 下使用 MySQL 5.6 时遇到了类似的问题。这里给出的主要解决方案有效。 (kobalz 建议的仅复制 dll 的解决方案不起作用。不知道为什么它适用于 kobalz 但不适用于我!)
然后我遇到了这篇文章中描述的另一个问题:
mysql2 gem compiled for wrong mysql client library
那里描述的解决方案避免了下载完整的 32 位 MySQL 并修复了这两个问题。本质上,下载 mysql 连接器(下载量要小得多)并使用它来编译 mysql2 gem。如帖子中所述,您必须下载完全正确的版本。就我而言:
http://dev.mysql.com/get/Downloads/Connector-C/mysql-connector-c-noinstall-6.0.2-win32.zip/from/pick
然后如上所述将 lib\libmysql.dll 文件从那里复制到您的 Ruby bin 目录中。
我将连接器放入 c:\mysql-connector-c-noinstall-6.0.2-win32
所以构建和安装 gem 的命令是:
gem install mysql2 -- --with-mysql-lib="c:\mysql-connector-c-noinstall-6.0.2-win32\lib" --with-mysql-include="c:\mysql- connector-c-noinstall-6.0.2-win32\include" --with-mysql-dir="c:\mysql-connector-c-noinstall-6.0.2-win32"
然后我在运行 rake 进行迁移时遇到了更多问题,但那是因为我一直在使用 mysql gem(不是 mysql2)并且忘记更新我的 database.yml。使用 mysql2 gem,它需要说:
发展: 适配器:mysql2
而不是
发展: 适配器:mysql
这很明显,一旦你弄清楚了,但我收到的错误消息与我之前收到的错误消息相似,所以看起来我的 gem 还是有问题。
【讨论】:
【参考方案7】:这个为我安装了 MariaDB 5.5:
gem install mysql2 -- '--with-mysql-lib="c:\Program Files (x86)\MariaDB 5.5\lib" --with-mysql-include="c:\Program Files (x86)\ MariaDB 5.5\include\mysql"'
使用以下命令构建本机扩展:'--with-mysql-lib="c:\Program Files (x86)\Maria DB 5.5\lib" --with-mysql-include="c:\Program Files (x86)\MariaDB 5.5\include\mys ql"'
如果您计划使用 Ruby x64,请务必使用 x64 MariaDB 包。 当然,在我的例子中,不要忘记将 C:\Program Files (x86)\MariaDB 5.5\lib\libmysql.dll 复制到 c:\Ruby200\bin。
【讨论】:
太棒了。使用安装在 Program Files(不是 Program Files (x86))中的 MariaDB 10.0 为我工作。谢谢一百万!【参考方案8】:将位于 MySQL 安装的 bin 目录中的 libmysql.dll 复制到 Ruby 安装的 bin 目录。我的位于 C:\Program Files\MySQL 和 C:\Ruby。
【讨论】:
按照您的建议复制了 DLL,但是没有任何区别。仍然收到相同的错误。 我已经为 ruby 安装了 win32-thread gem,这似乎对整个构建进度有一些影响。现在仍然收到相同的错误,但一些“否”响应现在变成了“是”【参考方案9】:这是在 Windows 8 64 位和使用 ruby 64 位上对我有用的方法
下载并安装 MYSQL Server 5.6 64bit
然后运行命令:
gem install mysql2 -v '0.3.16' -- '--with-mysql-lib="c:\Program Files\MySQL\MySQL Server 5.6\lib" --with-mysql-include="c: \Program Files\MySQL\MySQL Server 5.6\include"'
希望对你有帮助
【讨论】:
以上是关于无法安装 mysql2 gem的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Ubuntu 16.04 上安装 mysql2 [错误:安装 mysql2 时出错:错误:无法构建 gem 本机扩展。] [重复]