mysql2 gem 无法在 OS X 上使用 Homebrew 编译 MySQL 5.6.12

Posted

技术标签:

【中文标题】mysql2 gem 无法在 OS X 上使用 Homebrew 编译 MySQL 5.6.12【英文标题】:mysql2 gem fails to compile with MySQL 5.6.12 on OS X with Homebrew 【发布时间】:2013-06-18 18:16:00 【问题描述】:

我更新了我用 Homebrew 安装的所有软件包。 mysql 升级到 5.6.12(从 5.5.27 左右):

$ mysql --version
mysql  Ver 14.14 Distrib 5.6.12, for osx10.8 (x86_64) using  EditLine wrapper

现在 mysql2 gem 不再编译:

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

        /Users/pupeno/.rvm/rubies/ruby-1.9.3-p429-perf/bin/ruby extconf.rb
checking for rb_thread_blocking_region()... yes
checking for rb_wait_for_single_fd()... yes
checking for mysql.h... no
checking for mysql/mysql.h... no
-----
mysql.h is missing.  please check your installation of mysql and try again.
-----
*** 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
    --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=/Users/pupeno/.rvm/rubies/ruby-1.9.3-p429-perf/bin/ruby
    --with-mysql-config
    --without-mysql-config

文件mysql.h 存在于/usr/local/Cellar/mysql/5.6.12/include/mysql.h 中。有什么想法吗?

文件mysql.h 没有出现在/usr/local 中,因为符号链接似乎比应有的更深:

$ ls -la /usr/local/include/mysql
lrwxr-xr-x  1 pupeno  admin  36 21 Jun 15:18 /usr/local/include/mysql@ -> ../Cellar/mysql/5.6.12/include/mysql

而不是

/usr/local/Cellar/mysql/5.6.12/include

话虽如此,我手动修复了符号链接,但编译仍然失败。所以我被卡住了。

【问题讨论】:

你安装了mysql开发者库吗? @HunterMcMillen 我以为所有的开发文件都是用你的 mysql brew 包安装的。我错过了什么? Homebrew + rbenv 一直对我有用。这可能是 RVM 问题吗?另外,mysql.h 真的在你认为的位置吗? @tadman 它一直工作到升级并且 mysql.h 出现在我在问题中描述的位置。我不确定 rvm 是怎么搞砸的,但我不会放弃这个选项。 同样的问题已经找到解决方案了吗? 【参考方案1】:

我遇到了同样的问题,我设法解决了。我做了很多事情,我不确定它是什么,但是转到 MySQL 5.6.10 似乎已经奏效了。

卸载 MySQL 5.6.12:

brew unlink mysql
brew uninstall mysql

进入自制目录:

cd /usr/local

转到版本 5.6.10(您可以通过运行 brew versions mysql 找到版本列表:

git checkout 48f7e86 Library/Formula/mysql.rb

然后重新安装mysql:

brew install mysql

现在gem install mysql2 为我工作。

我还从源代码 (brew install mysql --build-from-source) 安装了 mysql,但这并没有解决问题,但可能是解决方案的一部分。

【讨论】:

iain 的回答为我解决了这个问题。在 homebrew 0.9.4(不确定其他版本)中,您可以在降级到 5.6.10 后使用brew pin mysql,如果您经常使用brew upgrade,它将阻止它升级。 像魅力一样工作! :) 如果您执行 brew 卸载,是否会转储您的数据目录?我不确定,所以在我的情况下,我使用brew switch 改回我已经安装的旧 mysql 版本,因为升级到最新版本对我来说并不重要。【参考方案2】:

这似乎也对我有用。它强制 gem 针对 5.6.10 进行编译。

bundle config build.mysql2 --with-mysql-config=/usr/local/Cellar/mysql/5.6.10/bin/mysql_config

相关答案: https://***.com/a/9360181

【讨论】:

只有在该路径上实际安装了 mysql 5.6.10 时才有效。 效果很好!只需要确保路径指向已安装的 MySQL 版本。 (就我而言,我需要针对 5.1 进行编译) 这重写了~/.bundle/config【参考方案3】:

只是;)

gem install mysql2 -- --with-mysql-config=/usr/local/Cellar/mysql/5.6.10/bin/mysql_config

【讨论】:

【参考方案4】:

我会推荐这个答案:mysql2 gem fails to compile with MySQL 5.6.12 on OS X with Homebrew

问题在于 Homebrew 版本的 MySql 中的编译器设置。原始答案在这里找到:http://www.randomactsofsentience.com/2013/05/gem-install-mysql2-missing-mysqlh-on-os.html

【讨论】:

【参考方案5】:

这里的最佳答案是过时的......酿酒商已经修复了mysql:

brew update
brew upgrade mysql
gem install mysql2

这会将 mysql 更新到最新版本,这似乎与 OSX 上的 mysql2 gem 可以正常工作。

【讨论】:

工作就像一个魅力!谢谢老兄。【参考方案6】:

有很多更新版本的 MySQL 可用,但对于在 Mac OS X Mojave 上安装的旧项目,我仍然需要运行 MySQL 5.6 并在 Rails 5 应用程序中链接它。

我配置了捆绑器,然后安装了捆绑包,一切顺利。

$> brew install mysql@5.6
$> bundle config build.mysql2 --with-mysql-config=/usr/local/Cellar/mysql\@5.6/5.6.42/bin/mysql_config
$> bundle install

请注意,您需要更新路径中的 MySQL 发布版本。

【讨论】:

【参考方案7】:

我必须指定 ldflagscppflags 才能正确编译,如下所示:

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

【讨论】:

这是 2020 年 1 月唯一对我有用的东西;请注意,运行“brew info mysql@5.6”时会列出他指示的标志 这也是唯一对我有用的东西,可能是因为升级到 openssl 1.1 gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include 这解决了我的ld: library not found for -lssl clang: error: linker command failed with exit code 1 (use -v to see invocation) mysql2 错误

以上是关于mysql2 gem 无法在 OS X 上使用 Homebrew 编译 MySQL 5.6.12的主要内容,如果未能解决你的问题,请参考以下文章

未加载库:尝试使用 mysql2 gem 在 OS X 10.6 上运行“rails server”时出现 libmysqlclient.16.dylib 错误

Ruby:mysql2-Gem 不工作(Mac OS X Snow Leopard,Ruby 1.9.2)

无法在 Bigsur 上安装 mysql2 Gem

无法在 Windows 7 上安装 MySQL2 gem

无法安装旧的 mysql2 gem

错误:安装 mysql2 时出错:错误:无法在 AWS Linux 上构建 gem 原生扩展