安装 mysql2 时出错:无法构建 gem 本机扩展

Error installing mysql2: Failed to build gem native extension

提问人:spacemonkey 提问时间:8/31/2010 最后编辑:Ritesh Kumarspacemonkey 更新时间:6/17/2023 访问量:304062

问:

我在尝试为 Rails 安装 gem 时遇到了一些问题。当我尝试通过运行来安装它时,或者它给了我以下错误:mysql2bundle installgem install mysql2

安装 mysql2 时出错:错误:无法构建 gem 本机扩展。

我怎样才能解决这个问题并成功安装?mysql2

mysql ruby-on-rails ruby rubygems mysql2

评论

0赞 Lucio 10/4/2015
就我而言,ruby 2.1 没有显示错误,但它冻结了几分钟。Spacemonkey 的答案解决了这个问题。

答:

7赞 João Pereira 8/31/2010 #1

您是否尝试过使用

 gem install mysql -- --with-mysql-lib=/usr/lib/mysql/lib 

指定基本目录的位置以及完成 gem 安装所需的 MySQL 库的路径?

来源:MySQL Gem 安装错误:无法构建 gem 本机扩展 MySQL 论坛 :: Ruby :: 安装适用于 Ruby 的 MySQL 绑定所需的帮助

评论

0赞 Joshua Pinter 10/31/2017
效果很好。我不得不使用不同的路径,我通过调用然后从那里找到目录来找到该路径。which mysqllib
978赞 spacemonkey 8/31/2010 #2

在 Ubuntu/Debian 和其他使用 aptitude 的发行版上:

sudo apt-get install libmysql-ruby libmysqlclient-dev

软件包已逐步淘汰,取而代之的是 。这就是我找到解决方案的地方。libmysql-rubyruby-mysql

如果上述命令因找不到而不起作用,则以下命令就足够了:libmysql-ruby

sudo apt-get install libmysqlclient-dev

在 Red Hat/CentOS 和其他使用 yum 的发行版上:

sudo yum install mysql-devel

在装有 Homebrew 的 Mac OS X 上:

brew install mysql

评论

5赞 femi 4/2/2011
我在 Windows 7 上遇到了同样的问题..有什么想法吗?上面的命令对我不起作用。.
41赞 S.M.Mousavi 11/10/2012
您好,我正在使用 Ubuntu 12.04 和 Ruby 1.9.3 和 Rails 3.2.8,就我而言,安装就足够了。libmysqlclient-dev
2赞 Americo Savinon 3/9/2013
如果您使用的是 Mac OSX:更新到最新版本的 XCode 并安装开发工具。我有同样的mysql安装问题(即使使用--with-mysql-config=/usr/local/mysql/bin/mysql_config )
2赞 Michael Lang 9/5/2013
不需要libmysql-ruby,因为我是通过RVM安装了Ruby
2赞 nitigyan 7/18/2014
对于 Windows,请尝试 stackoverflow.com/questions/19014117/ 的 Ticked 答案......
2赞 lofte 9/14/2010 #3

我在 Mac 上遇到此错误,发现我需要从 mysql 32 位升级到 mysql 64 位才能消除此错误。我在装有 ruby 1.9.2 和 rails3.0.0 的英特尔 macbook pro 上运行 OSX 10.6

我还需要安装 xcode 才能获得编译 gem 所需的 unix 实用程序,例如“make”。

完成此操作后,我能够运行 gem install mysql 和 gem install mysql2 而不会出错。

3赞 arty 10/16/2010 #4

我也收到了这个错误。通过安装开发包解决。我正在使用 arch,它是:

sudo pacman -S base-devel

其中安装了:

m4, autoconf, automake, bison, fakeroot, flex, libmpc, ppl, cloog-ppl, elfutils, gcc,
libtool, make, patch, pkg-config

但我认为它实际上需要 make 和 gcc。错误输出说(在我的机器上,除其他外):

“你必须先安装开发工具。”

所以这是一个显而易见的决定,它很有帮助。

1赞 tobinjim 1/13/2011 #5

我在 Mac OS X 10.6.6 上构建了宝石 1) 确保已安装开发人员工具包 2)从Source下载当前的MySQL包(在我的情况下为5.5.8) 3) 从 cmake.org 安装 cmake 工具 4)从mysql分发文件中按照INSTALL-SOURCE第2.11节中的说明进行操作 5) gem 构建成功,但文档中有两个错误是 rdoc 和 ri 抱怨的。 但是现在当我尝试要求“mysql2”时,我得到了一个sudo gem install mysql2 -- --srcdir=/usr/local/mysql/include

LoadError: no such file to load -- mysql2/mysql2

我希望我得到的错误是找不到libmysqlclient.16.dylib,因为我们在另一篇文章中发现了这一点(搜索install_name_tool)。

我的$PATH里面有 /usr/local/mysql(这是我的源代码和构建文件所在的位置),所以我有点难住了。如果有人有任何想法,我会在睡几个小时后回来查看。

20赞 OfficeYA 1/23/2011 #6

我有几台计算机,32 位和 64 位处理器,它们在 Ubuntu Linux、Maverick (10.10) 版本上运行。

我也有同样的问题,对我来说,它完成了这项工作!!sudo apt-get install libmysql-ruby libmysqlclient-dev

4赞 santo101 2/20/2011 #7

我在 Windows 7 上遇到了这个问题。这显然是一个不兼容的问题,解决方案如下:

从较旧的 InstantRails 安装程序下载文件。它可从 InstantRails GitHub 存储库获得。libmySQL.dll

接下来,将该文件复制到 Ruby/bin 文件夹中。

现在,你可以去;)

评论

1赞 aakoch 8/9/2011
人力资源:(我试过这个,但在尝试运行时仍然出现错误。bundle install
67赞 Kelsin 5/26/2011 #8

我在 Mac 上使用自制软件安装开源程序。我确实必须安装 mac Dev 工具才能安装自制软件,但之后很简单:

brew install mysql

安装 MySQL。从那以后,我再也没有遇到过mysql gem问题。

评论

3赞 hnprashanth 4/10/2012
即使在这样做之后,我也会遇到错误。当我做gem i mysql2时,我应该传递一些选项吗?
0赞 KrisG 6/9/2012
运行此驱动程序后,我在 Mac OSX Lion 上安装 mysql2 ruby gem 没有问题。
4赞 Chuck Batson 10/12/2016
如果这没有帮助,请尝试 。brew link mysql --force
1赞 Swaathi Kakarla 3/18/2022
@ChuckBatson 完美,它奏效了!我已经安装了 [email protected] 所以我只需要做brew link [email protected] --force
0赞 Ritesh Kumar 5/31/2011 #9

如果仍然出现错误,请按照 Rails 3 上的 mysql2 gem 安装步骤进行操作 -

http://rorguide.blogspot.com/2011/03/installing-mysql2-gem-on-ruby-192-and.html

大多数用户能够安装 mysql2 gem。

6赞 Carlos Pardilla 8/9/2011 #10

这在 Windows 中解决了我的问题:

subst X: "C:\Program files\MySQL\MySQL Server 5.5" 
gem install mysql2 -v 0.x.x --platform=ruby -- --with-mysql-dir=X: --with-mysql-lib=X:\lib\opt 
subst X: /D

评论

0赞 Carlos Pardilla 8/9/2011
我正要发布源代码,但我看到用户 Ritesh Kumar 已经这样做了。所以他的功劳,不是我的功劳。
1赞 Junior Mayhé 3/22/2014
如果您的 lib 没有 opt 文件夹:gem install mysql2 --platform=ruby -- --with-mysql-dir=X: --without-opt-dir
0赞 Mako212 10/7/2022
这对我有用(整整十年后!这是对我有用的完整安装命令。并使用 MySQL Server 8.0gem install mysql2 -v 0.3.11 --platform=ruby -- --with-mysql-lib=X: --without-opt-dir
7赞 Mark Locklear 10/21/2011 #11

如果您使用的是 yum,请尝试:

sudo yum install mysql-devel

评论

0赞 Lennon 8/31/2012
它在基于 CentOS 的 Amazon EC2 微型实例中为我工作。
0赞 mmell 12/13/2011 #12

更正 mysql-dev 问题后,您可能需要删除错误的 mysql2 安装。仔细查看 $ bundle install 后的消息。您可能需要

rm -rf vendor/cache/
rm -rf ./Zentest

这将清除错误的 mysql2 安装,以便最终的 $ bundle 安装可以创建一个好的安装。

40赞 Francois 2/17/2012 #13

这是Windows用户的解决方案,希望对您有所帮助!

在 Windows 上使用 MySQL 和 Rails 3

  • 安装 railsinstaller -> www.railsinstaller.org(我把它安装到 c:\Rails)

  • 安装MySQL(我用的是MySQL 5.5)->dev.mysql.com/downloads/installer/

--- for mySQL 安装 ---

如果您还没有安装这两个文件,您可能需要它们来使 MySQL vcredist_x86.exe

-> http://www.microsoft.com/download/en/details.aspx?id=5555 dotNetFx40_Full_x86_x64.exe -> http://www.microsoft.com/download/en/details.aspx?id=17718

使用默认安装 显影机

-MySQL服务器配置- 端口:3306
Windows 服务名称:MySQL55
mysql root pass:root(您可以稍后更改)(
用户名:root)
-MySQL服务器配置-

--- for mySQL 安装---


--- 安装 mysql2 gem ---

重要提示:使用 Git Bash 命令行执行此操作(这是与 railsinstaller 一起安装的) -> start/Git Bash

gem install mysql2 -- '--with-mysql-lib=“c:\Program Files\MySQL\MySQL Server 5.5\lib” --with-mysql-include=“c:\Program Files\MySQL\MySQL Server 5.5\include”'

现在 gem 应该已正确

安装最后,将 libmysql.dll 文件从
C:\Program Files\MySQL\MySQL Server 5.5\lib
复制到
C:\Rails\Ruby1.9.2\bin

---安装 mysql2 Gem ---


如果您不确定如何使用 MySQL 创建 Rails 3 应用程序,您现在可以将 Rails 应用程序与 MySQL 一起使用,请继续阅读......


--- 获取 MySQL 的 Rails 3 应用程序 ---

打开命令提示符(不是 Git Bash) -> start/cmd
导航到您的文件夹 (c:\Sites)
创建新的 rails 应用程序

rails new world

删除文件 c:\Sites\world\public\index.html
编辑文件 c:\Sites\world\config\routes.rb
添加此行 -> root :to => 'cities#index'


打开命令提示符(生成视图和控制器)

rails generate scaffold city ID:integer Name:string CountryCode:string District:string Population:integer



将文件 c:\Sites\world\app\models\city.rb 编辑为如下所示

class City < ActiveRecord::Base
 set_table_name "city"
end

将文件 c:\Sites\world\config\database.yml 编辑为如下所示

development:
adapter: mysql2
encoding: utf8
database: world
pool: 5
username: root
password: root
socket: /tmp/mysql.sock

添加到 gemfile

gem 'mysql2'

打开命令提示符窗口 cmd,而不是 Git Bash(运行您的应用程序!
导航到应用文件夹 (c:\Sites\world)

rails s

在此处打开浏览器 -> http://localhost:3000

--- 让 Rails 3 应用程序与 MySQL --- 一起使用

评论

0赞 Danpe 8/8/2012
谢谢,问题是我使用了 widnows PowerShell 而不是正常的命令提示符。现在它正在:)工作
0赞 duykhoa 10/30/2012
主机必须是 127.0.0.1,如果密码是数字,则必须放在引号中 ex '123456',否则我们可以正常输入 ex admin123
3赞 Mifeng 6/20/2014
使用 XAMPP:gem install mysql2 -- --with-mysql-dir=C:\xampp\mysql
0赞 Ivan 11/17/2014
查看路径 --with-mysql-include: gem install mysql2 -- --platform=ruby --with-mysql-lib=“d:\mariadb\lib” --with-mysql-include=“d:\mariadb\include\mysql”
0赞 O'Mutt 12/27/2014
@Mifeng对我来说效果很好,但我使用的是 GitBash,并且需要没有引号,我的“”被剥离了。谢谢-- --with-mysql-dir="C:\xampp\mysql"
0赞 Bruce 10/3/2012 #14

下载正确版本的 mysqllib.dll,然后将其复制到 Ruby bin 确实对我有用。点击此链接 plases mysql2 gem 编译错误的 mysql 客户端库

0赞 Sunil D. 2/12/2013 #15

升级到 Mac OS X Mountain Lion 后尝试安装 mysql2 gem 时出现“您必须先安装开发工具”错误。显然,执行此升级会删除命令行编译器。

要解决以下问题:

  • 我卸载了非常旧版本的 Xcode(在 /Developer/Library 中运行了卸载脚本)。然后删除了 /Developer 目录。
  • 转到 AppStore 并下载了 Xcode。
  • 启动 Xcode 并进入 Preferences -> Downloads,并安装命令行工具。
5赞 capu 8/5/2013 #16

如果您仍然遇到问题......

尝试安装

   sudo apt-get install ruby1.9.1-dev
0赞 Amrit Dhungana 3/19/2014 #17

您遇到此问题是因为您尚未安装 MySql。在安装 mysql2 gem 之前。安装 MySQL。之后,mysql2 gem 将安装。

0赞 Sony Mathew 10/1/2014 #18

我只是想专门为 Mac 用户添加这个答案。

在我更新我的 xcode 之前,我的服务器运行良好。在启动我的 rails 服务器时,错误显示如下

Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

    /Users/user/.rvm/rubies/ruby-1.9.3-p448/bin/ruby extconf.rb --with-mysql-
    checking for rb_thread_blocking_region()... /Users/user/.rvm/rubies/ruby-1.9.3-  
    p448/lib/ruby/1.9.1/mkmf.rb:381:in `try_do': The compiler failed to generate an    
    executable file. (RuntimeError)

并且建议在错误消息的末尾安装 mysql2 gem。因此,当我尝试安装它时,我遇到了此问题中提到的错误。我得到的错误如下

ERROR:  Error installing mysql2:
ERROR: Failed to build gem native extension.

因此,正如这篇文章中所建议的那样,我尝试了“brew install mysql”,然后退出说已经安装了 mysql 版本。但之前有人警告说

Warning: You have not agreed to the Xcode license.
Builds will fail! Agree to the license by opening Xcode.app or running:
xcodebuild -license

然后我尝试了这个并在最后输入“同意”。您必须是 root 用户才能同意该许可证。sudo xcodebuild -license

在此之后,我再次尝试捆绑安装,然后一切正常。[ 即使由于这次 xcode 更新,我的塔也有问题。

1赞 Arman Ortega 8/13/2015 #19

对于Windows用户: 例如,您可以设置 mysql 的 lib 和 include 路径,如果您使用的是 xampp,则可以这样:

gem install mysql2 -- '--with-mysql-lib="C:\xampp\mysql\lib" --withmysql-include="C:\xampp\mysql\include"'
20赞 aruanoc 9/30/2015 #20

MacOS用户的另一种方式

如果您使用“brew”来安装 mysql:

gem install mysql2 -v 'x.x.x' -- --with-mysql-config=/usr/local/Cellar/mysql/y.y.y/bin/mysql_config

x.x.x = 要安装的 mysql2 gem 的版本 y.y.y = 已安装
的 MySQL 版本以查找它。
ls /usr/local/Cellar/mysql

评论

0赞 Stan 11/25/2015
尝试了 ~10 个答案,来自这里提出的各种问题......你解决了它。谢谢:)
3赞 vipin 12/28/2015 #21

你必须安装一些依赖项

sudo apt-get install libmysql-ruby libmysqlclient-dev
1赞 the12 12/2/2016 #22

该解决方案仅适用于 Mac OS X

如果您使用自制软件安装了 MySQL,那么对我有用的是卸载 MySQL,然后通过 MySQL 网站 (https://www.mysql.com/) 安装 MySQL Community Edition。

安装后,如果您遇到权限被拒绝的问题,只需重新输入命令 或 如有必要,即可。gem install mysql2sudo gem install mysql2

0赞 Jerome 3/12/2018 #23

libmysql-ruby已被逐步淘汰和替换。新命令:

 sudo apt-get install ruby-mysql libmysqlclient-dev
6赞 Ali 5/31/2018 #24

在 Debian Stretch 上,对我有用的软件包是 default-libmysqlclient-dev

sudo apt-get update && apt-get install -y default-libmysqlclient-dev

5赞 Aurelio 5/23/2019 #25

就我而言,这有助于:

$ export LDFLAGS="-L/usr/local/opt/openssl/lib"
$ export CPPFLAGS="-I/usr/local/opt/openssl/include"

然后:

gem install mysql2 -v '0.5.2' --source 'https://rubygems.org/' -- --with-cppflags=-I/usr/local/opt/openssl/include --with-ldflags=-L/usr/local/opt/openssl/lib

结果:

Building native extensions with: '--with-cppflags=-I/usr/local/opt/openssl/include --with-ldflags=-L/usr/local/opt/openssl/lib'
This could take a while...
Successfully installed mysql2-0.5.2
Parsing documentation for mysql2-0.5.2
Installing ri documentation for mysql2-0.5.2
Done installing documentation for mysql2 after 0 seconds
1 gem installed

请参阅此帖子(警告:内部日语)。

39赞 Allen 8/11/2019 #26

对于 MacOS Mojave

gem install mysql2 -v '0.5.2' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include

评论

1赞 Vlad 5/14/2020
以及 MacOS Catalina
1赞 Akash Agarwal 7/16/2020
解决了这个问题:。谢谢!clang: error: linker command failed with exit code 1 (use -v to see invocation) make: *** [mysql2.bundle] Error 1
0赞 Pattu 6/19/2021
我被困了几个小时。只有这个解决方案有效。
23赞 Paa Yaw 1/20/2020 #27

在Ubuntu上(18.04)

我能够通过运行以下命令来解决此问题:

sudo apt-get install build-essential libmysqlclient-dev
gem install mysql2

参考

评论

4赞 Rich Steinmetz 8/3/2021
在 Ubuntu 20.04 上对我有用的东西
3赞 Yonela Nuba 5/13/2021 #28

我可以看到大多数人都找到了这个问题的解决方案,这主要是共用的,但不限于缺少软件包,这在我清除 mysql 并重新安装后发生在我身上。我必须运行此命令才能解决我的问题:

sudo apt-get install libmysqlclient-dev

这个命令帮助我解决了我的问题

0赞 Jean-Roch B. 10/28/2021 #29

在 ubuntu 20.04 LTS 下,它是唯一对我有用的解决方案:

sudo apt-get install ruby-mysql2
1赞 Lane 11/16/2021 #30

根据 https://github.com/brianmario/mysql2/issues/1175 ,我通过以下方式修复了它

gem install mysql2 -- \
 --with-mysql-lib=/usr/local/Cellar/mysql/8.0.26/lib \
 --with-mysql-dir=/usr/local/Cellar/mysql/8.0.26 \
 --with-mysql-config=/usr/local/Cellar/mysql/8.0.26/bin/mysql_config \
 --with-mysql-include=/usr/local/Cellar/mysql/8.0.26/include
0赞 John 8/24/2022 #31

适用于 Windows 用户的更新解决方案。我正在跑步

视窗 10

MySQL的8.0.30

红宝石 3.1.2

我的 Ruby 版本是 rubyinstaller.org 的版本,其中包含 MYSYS 开发套件

我下载了一个 MariaDB C 连接器库 msi 安装程序文件 v3.1.17,运行它并将相关文件安装在 Program Files 的目录中。我将该目录复制到另一个位置,重命名它,使其没有任何空格,然后运行命令:

gem install mysql2 --platform=ruby -- --with-mysql-dir="c:/my-mariadb-connector-path-with-no-spaces"

这给了我一个功能齐全的宝石。

这是库的特定版本,而不是最新的版本。在MariaDB网站上找到下载选项的方法有点令人困惑,所以这里是直接下载链接。

https://dlm.mariadb.com/2319542/Connectors/c/connector-c-3.1.17/mariadb-connector-c-3.1.17-win64.msi

在我走到这一步之前,我已经尝试了几件事,但没有奏效。我将它们作为背景信息包含在下面,但如果您只对有效的解决方案感兴趣,那么您现在可以停止阅读。

一些消息来源表明,如果您安装了 MYSYS devkit,则可以使用以下命令构建 gem:

ridk exec gem install mysql2 --platform=ruby -- --use-system-libraries

这没有为我编译。

您可能还看到了下载 MySQl 连接器库的存档版本 6.1 的建议。我尝试了这个,gem 编译了,但是当我尝试启动我的应用程序时,我收到一条错误消息:“MySQL客户端库版本不正确!这个 gem 是为 6.1.11 编译的,但客户端库是 10.5.5。

在 MySQL V8 及更高版本中,C 库不再是可选的附加功能,而是包含在主安装中。我找到了相关文件,将它们复制到无空格目录路径并尝试了通常的命令。再次编译了 gem,但应用程序无法启动。这次错误消息说“此 gem 是针对 8.0.30 编译的,但客户端库是 10.5.5”

我还尝试了最新版本的MariaDB库。因此,错误消息说 gem 是针对 10.6.8 编译的。您需要上述特定版本,是的,即使您使用的是 Oracle Corporation 分发的“原始”MySql,它也是您需要的 MariaDB 库

0赞 Ramshad 10/12/2022 #32
  1. 从 [此处][1] 下载连接器 C 文件。(https://downloads.mysql.com/archives/c-c/)

  2. 将文件解压缩到某个位置,例如 C:\ror\mysqlC\mysql-connector-c-6.1.11-winx64\lib

  3. 使用此模板

gem install mysql2 -- '--with-mysql-lib=“$lib_location” --with-mysql-include=“$include_location"'

例如:我的安装位置是 lib_location -> C:\ror\mysqlC\mysql-connector-c-6.1.11-winx64\lib

gem install mysql2 -- '--with-mysql-lib=“C:\ror\mysqlC\mysql-connector-c-6.1.11-winx64\lib” --with-mysql-include=“C:\ror\mysqlC\mysql-connector-c-6.1.11-winx64\include”'

1赞 FreePender 6/17/2023 #33

对于带 Ventura 的 M1:

gem install mysql2 -v '0.5.3' -- --with-mysql-config=$(brew --prefix mysql)/bin/mysql_config --with-ldflags="-L$(brew --prefix zstd)/lib -L$(brew --prefix openssl)/lib" --with-cppflags=-I$(brew --prefix openssl)/include

感谢 https://gist.github.com/fernandoaleman/385aad12a18fe50cf5fd1e988e76fd63