提问人:spacemonkey 提问时间:8/31/2010 最后编辑:Ritesh Kumarspacemonkey 更新时间:6/17/2023 访问量:304062
安装 mysql2 时出错:无法构建 gem 本机扩展
Error installing mysql2: Failed to build gem native extension
问:
我在尝试为 Rails 安装 gem 时遇到了一些问题。当我尝试通过运行来安装它时,或者它给了我以下错误:mysql2
bundle install
gem install mysql2
安装 mysql2 时出错:错误:无法构建 gem 本机扩展。
我怎样才能解决这个问题并成功安装?mysql2
答:
您是否尝试过使用
gem install mysql -- --with-mysql-lib=/usr/lib/mysql/lib
指定基本目录的位置以及完成 gem 安装所需的 MySQL 库的路径?
来源:MySQL Gem 安装错误:无法构建 gem 本机扩展 MySQL 论坛 :: Ruby :: 安装适用于 Ruby 的 MySQL 绑定所需的帮助
评论
which mysql
lib
在 Ubuntu/Debian 和其他使用 aptitude 的发行版上:
sudo apt-get install libmysql-ruby libmysqlclient-dev
软件包已逐步淘汰,取而代之的是 。这就是我找到解决方案的地方。libmysql-ruby
ruby-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
评论
libmysqlclient-dev
我在 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 而不会出错。
我也收到了这个错误。通过安装开发包解决。我正在使用 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。错误输出说(在我的机器上,除其他外):
“你必须先安装开发工具。”
所以这是一个显而易见的决定,它很有帮助。
我在 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(这是我的源代码和构建文件所在的位置),所以我有点难住了。如果有人有任何想法,我会在睡几个小时后回来查看。
我有几台计算机,32 位和 64 位处理器,它们在 Ubuntu Linux、Maverick (10.10) 版本上运行。
我也有同样的问题,对我来说,它完成了这项工作!!sudo apt-get install libmysql-ruby libmysqlclient-dev
我在 Windows 7 上遇到了这个问题。这显然是一个不兼容的问题,解决方案如下:
从较旧的 InstantRails 安装程序下载文件。它可从 InstantRails GitHub 存储库获得。libmySQL.dll
接下来,将该文件复制到 Ruby/bin 文件夹中。
现在,你可以去;)
评论
bundle install
我在 Mac 上使用自制软件安装开源程序。我确实必须安装 mac Dev 工具才能安装自制软件,但之后很简单:
brew install mysql
安装 MySQL。从那以后,我再也没有遇到过mysql gem问题。
评论
brew link mysql --force
brew link [email protected] --force
如果仍然出现错误,请按照 Rails 3 上的 mysql2 gem 安装步骤进行操作 -
http://rorguide.blogspot.com/2011/03/installing-mysql2-gem-on-ruby-192-and.html
大多数用户能够安装 mysql2 gem。
这在 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
评论
gem install mysql2 --platform=ruby -- --with-mysql-dir=X: --without-opt-dir
gem install mysql2 -v 0.3.11 --platform=ruby -- --with-mysql-lib=X: --without-opt-dir
如果您使用的是 yum,请尝试:
sudo yum install mysql-devel
评论
更正 mysql-dev 问题后,您可能需要删除错误的 mysql2 安装。仔细查看 $ bundle install 后的消息。您可能需要
rm -rf vendor/cache/
rm -rf ./Zentest
这将清除错误的 mysql2 安装,以便最终的 $ bundle 安装可以创建一个好的安装。
这是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 --- 一起使用
评论
gem install mysql2 -- --with-mysql-dir=C:\xampp\mysql
-- --with-mysql-dir="C:\xampp\mysql"
下载正确版本的 mysqllib.dll,然后将其复制到 Ruby bin 确实对我有用。点击此链接 plases mysql2 gem 编译错误的 mysql 客户端库
升级到 Mac OS X Mountain Lion 后尝试安装 mysql2 gem 时出现“您必须先安装开发工具”错误。显然,执行此升级会删除命令行编译器。
要解决以下问题:
- 我卸载了非常旧版本的 Xcode(在 /Developer/Library 中运行了卸载脚本)。然后删除了 /Developer 目录。
- 转到 AppStore 并下载了 Xcode。
- 启动 Xcode 并进入 Preferences -> Downloads,并安装命令行工具。
如果您仍然遇到问题......
尝试安装
sudo apt-get install ruby1.9.1-dev
您遇到此问题是因为您尚未安装 MySql。在安装 mysql2 gem 之前。安装 MySQL。之后,mysql2 gem 将安装。
我只是想专门为 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 更新,我的塔也有问题。
对于Windows用户: 例如,您可以设置 mysql 的 lib 和 include 路径,如果您使用的是 xampp,则可以这样:
gem install mysql2 -- '--with-mysql-lib="C:\xampp\mysql\lib" --withmysql-include="C:\xampp\mysql\include"'
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
评论
你必须安装一些依赖项
sudo apt-get install libmysql-ruby libmysqlclient-dev
该解决方案仅适用于 Mac OS X
如果您使用自制软件安装了 MySQL,那么对我有用的是卸载 MySQL,然后通过 MySQL 网站 (https://www.mysql.com/) 安装 MySQL Community Edition。
安装后,如果您遇到权限被拒绝的问题,只需重新输入命令 或 如有必要,即可。gem install mysql2
sudo gem install mysql2
libmysql-ruby
已被逐步淘汰和替换。新命令:
sudo apt-get install ruby-mysql libmysqlclient-dev
在 Debian Stretch 上,对我有用的软件包是 default-libmysqlclient-dev
sudo apt-get update && apt-get install -y default-libmysqlclient-dev
就我而言,这有助于:
$ 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
请参阅此帖子(警告:内部日语)。
对于 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
评论
clang: error: linker command failed with exit code 1 (use -v to see invocation) make: *** [mysql2.bundle] Error 1
在Ubuntu上(18.04)
我能够通过运行以下命令来解决此问题:
sudo apt-get install build-essential libmysqlclient-dev
gem install mysql2
评论
我可以看到大多数人都找到了这个问题的解决方案,这主要是共用的,但不限于缺少软件包,这在我清除 mysql 并重新安装后发生在我身上。我必须运行此命令才能解决我的问题:
sudo apt-get install libmysqlclient-dev
这个命令帮助我解决了我的问题
在 ubuntu 20.04 LTS 下,它是唯一对我有用的解决方案:
sudo apt-get install ruby-mysql2
根据 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
适用于 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 库
从 [此处][1] 下载连接器 C 文件。(https://downloads.mysql.com/archives/c-c/)
将文件解压缩到某个位置,例如 C:\ror\mysqlC\mysql-connector-c-6.1.11-winx64\lib
使用此模板
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”'
对于带 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
评论