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】:我必须指定 ldflags
和 cppflags
才能正确编译,如下所示:
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.1gem 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 错误