捆绑安装问题:mysql.h文件丢失。

31
在我的 Mac OSX 10.6 32 位系统中,我可以很容易地安装 mysql2 gem,但是在 Mini Mac 10.6 64 位服务器上却不能安装。 在麻烦的服务器中,我已经安装了 MySQL 5.5.11,而在我的家庭 Mac 上则是 MySQL 5.5.0.m2。不知何故,当我运行 bundle install 时,在服务器中它尝试安装 mysql2.0.3.2,而在家庭电脑中则是 mysql2.0.2.6。 请不要告诉我要使用以下命令: env ARCHFLAGS="-arch x86_64" sudo gem install mysql2 --version '= 0.2.6' -- --with-mysql-config=/usr/local/mysql/bin/mysql_config 我尝试过了,但不起作用。 将 /usr/local/mysql/bin 加入 $PATH 也没有帮助。 错误代码:
    Installing mysql2 (0.3.2) with native extensions /Users/administrator/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:533:in `rescue in block in build_extensions': ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError)

        /Users/administrator/.rvm/rubies/ruby-1.9.2-p180/bin/ruby extconf.rb 
checking for rb_thread_blocking_region()... 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
    --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=/Users/administrator/.rvm/rubies/ruby-1.9.2-p180/bin/ruby
    --with-mysql-config
    --without-mysql-config


Gem files will remain installed in /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.3.2 for inspection.
Results logged to /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.3.2/ext/mysql2/gem_make.out
    from /Users/administrator/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:511:in `block in build_extensions'
    from /Users/administrator/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:486:in `each'
    from /Users/administrator/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:486:in `build_extensions'
    from /Users/administrator/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:159:in `install'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/source.rb:96:in `install'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/installer.rb:55:in `block in run'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/spec_set.rb:12:in `block in each'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/spec_set.rb:12:in `each'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/spec_set.rb:12:in `each'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/installer.rb:44:in `run'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/installer.rb:8:in `install'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/cli.rb:225:in `install'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/vendor/thor/task.rb:22:in `run'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/vendor/thor/invocation.rb:118:in `invoke_task'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/vendor/thor.rb:246:in `dispatch'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/vendor/thor/base.rb:389:in `start'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/bin/bundle:13:in `<top (required)>'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/bin/bundle:19:in `load'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/bin/bundle:19:in `<main>'
13个回答

91

我尝试了这里发布的所有解决方案,但没有成功。 我用homebrew重新安装了几次mysql,仍然没有运气。 然后我发现了一篇博客文章提供的解决方案。

我在/usr/local/Cellar/mysql/5.6.12/bin中编辑了mysql_config文件,并删除了cflags和cxxflags的W编译器选项-Wno-null-conversion-Wno-unused-private-field

这解决了使用gem install mysql2bundle install时的问题。

参考:http://www.randomactsofsentience.com/2013/05/gem-install-mysql2-missing-mysqlh-on-os.html


1
已确认可在OS X 10.8.3、XCode 4.6.3和MySQL 5.6.12上运行。 - Thilo
1
我曾经遇到过同样的问题,这个方法解决了我的问题。这些标志可能是错误引入的吗?我以前使用过brewed mysql编译mysql2 gem,没有任何问题。 - arturhoo
2
在10.8 / 5.6.12上完美运行。 - Matt Darby
谢谢你!我们在哪里可以报告/修复这个 bug? - Tyler Brock
同样的问题,但我的MySQL来自他们网站上提供的OSX安装程序,而不是brew或fink安装。上面的修复方法完美地解决了问题,但我不得不编辑这个文件:/usr/local/mysql/bin/mysql_config - GoinAum
显示剩余2条评论

28

我在一个Redmine repo上执行了bundle install命令,并收到相同的错误消息:

mysql.h文件丢失。 请检查您的mysql安装并重试。

运行Fedora 16 64位操作系统,我只需要从发行版的rpm中安装mysql-devel(开发包)即可解决问题!

因此,我认为您可以尝试

yum install mysql-devel

或者使用apt-get安装缺失的开发包。


1
这与OS X无关。 - Oleksandr Skrypnyk
2
那篇文章帮了我很多,所以我非常感激作者的发布! - Tallboy
谢谢。关于此信息,在Fedora 19(mariadb)中,显然是mariadb-devel。 - voondo
谢谢你的回答,它对我很有帮助。 - raven

8

对于没有使用brew安装mysql且使用mysql 5.6及以上版本的用户:

根据这个答案

您需要编辑mysql_config文件,该文件在我的情况下位于/usr/local/mysql-5.6.12-osx10.7-x86_64/bin目录中。

并将cflagscxxflags修改为:

cflags="-I$pkgincludedir  -Wall -Os -g -fno-strict-aliasing -DDBUG_OFF " #note: end space!
cxxflags="-I$pkgincludedir  -Wall -Os -g -fno-strict-aliasing -DDBUG_OFF " #note: end space!

在进行这些操作之后,
$ gem install mysql2 -v '0.3.13'

运行顺畅

这对我在OSX 10.9.4上尝试安装mysql2 0.3.11有效。 - clami219
非常好。在使用gem install mysql的Mavericks系统中为我工作了。非常感谢。 - SteveRawlinson

4
“好的,对我来说解决方案是:”
$ sudo brew install mysql

$ sudo env ARCHFLAGS="-arch i386" gem install mysql -- \
  --with-mysql-dir=/usr/local/mysql --with-mysql-lib=/usr/local/mysql/lib \
  --with-mysql-include=/usr/local/mysql/include

来源:http://wonko.com/post/how-to-install-the-mysqlruby-gem-on-mac-os-x-leopard 或:
$sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- \
  --with-mysql-dir=/usr/local/mysql --with-mysql-lib=/usr/local/mysql/lib \
  --with-mysql-include=/usr/local/mysql/include

如果您的MySQL版本是64位
之后我遇到了很多问题,因为如果我想创建数据库:
$: bundle exec rake db:reset

我收到了这个错误:
dyld: lazy symbol binding failed: Symbol not found: _mysql_init
  Referenced from: /Users/workdreamer/Sites/cavortify/implementation/cavortify/mysql/ruby/1.8/gems/mysql-2.8.1/lib/mysql_api.bundle
  Expected in: flat namespace

dyld: Symbol not found: _mysql_init
  Referenced from: /Users/workdreamer/Sites/cavortify/implementation/cavortify/mysql/ruby/1.8/gems/mysql-2.8.1/lib/mysql_api.bundle
  Expected in: flat namespace

答案是:在您的Gemfile中添加:gem“ruby-mysql”。
好的,找到解决方案花了一天半时间。
祝您有愉快的一天!

3
你不应该需要使用sudo brew。 - sclarson
ruby-mysql 不使用您构建的本地文件。 - Jeff Paquette

2
这个方法适用于64位机器上的Rails 3.1.0(以及更高版本)。我使用的是Ruby-1.9.2-p180。
这篇博客回答了这个问题:http://www.tatvartha.com/2010/10/installing-mysql-gem-with-bundler-on-snow-leopard/ 基本上,上面的方法:$ sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
可能有效,但没有bundler。
要使用bundler进行操作,首先必须在终端上运行以下命令:
bundle config build.mysql2 --with-mysql-config=/usr/local/mysql/bin/mysql_config

请注意,在该博客中应使用"mysql2"而不是"mysql"。
这将向~/.bundle/config文件中添加一个配置。
然后将以下内容添加到~/.bash_profile中:
export ARCHFLAGS="-arch x86_64"

这与告诉bundler在此帖子之上运行命令相同。

3
小提示:由于我使用Homebrew安装了Mysql,所以这一行应该类似于:bundle config build.mysql2 --with-mysql-config=/usr/local/Cellar/mysql/5.5.20/bin/mysql_config - Jarin Udom
1
或者你可以像这样查找 $ find / -name mysql_config 2>/dev/null - tyoc213

1
对于Mariadb:
sudo apt-get install libmariadbclient18 libmariadbclient-dev

然后。
gem install mysql2

可以成功安装。


在 Mac OS 上不可用 apt-get。 - Artem Zinnatullin
是的 @ArtemZinnatullin -- 这是为Ubuntu用户设计的,针对那些通过谷歌搜索 "mysql.h is missing" 来寻找解决方案的人。我花了一些时间来寻找解决方案,现在想要帮助其他人。 - Sebastian Piech

1

这对我在我的Mac OSX Lion上起作用:

sudo env ARCHFLAGS="-I/usr/local/include/mysql/mysql  -pipe -fPIC    -D_P1003_1B_VISIBLE -DSIGNAL_WITH_VIO_CLOSE -DSIGNALS_DONT_BREAK_READ -DIGNORE_SIGHUP_SIGQUIT  -DDONT_DECLARE_CXA_PURE_VIRTUAL" gem install mysql -- --with-mysql-dir=/usr/local/mysql --with-mysql-lib=/usr/local/lib/mysql/mysql --with-mysql-include=/usr/local/include/mysql/mysql --with-mysql-config=/usr/local/bin/mysql_config

这篇博客回答了它


1
我的问题是通过可下载的二进制文件首次安装MySql导致的。它最初安装的版本为5.5.28。然后我尝试通过homebrew进行安装。Brew安装了版本5.6.x。然而,在通过homebrew安装的过程中,/usr/local/mysql的符号链接仍指向5.5.28。
更新符号链接到通过homebrew安装的任何版本。
例如:/usr/local/mysql -> /usr/local/Cellar/mysql/5.6.13/
这可能只是解决方案的一部分。

1
唯一让我得以使其正常工作的方法是安装mysql的x64版本。我只需使用此处http://dev.mysql.com/downloads/mysql/找到的.dmg,它就可以正常工作了。希望我能够省回4个小时的时间来解决这个问题。

0

确认已安装gcc编译器。如果没有安装,将会收到同样的错误提示信息。

你可以查看所提及的结果/日志文件以获取更多关于问题原因的线索。


原来我在archflag命令中误加了一个空格。 - jaycode

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接