15

我尝试了几个想法......他们都没有工作......我只是想将 mysql2 安装为 gem。我的 mysql 正在工作,但每次我的系统说,mysql.h 丢失了......有人知道吗?现在很郁闷...

我正在使用 osx 10.8.3、ruby 1.9.3、rails 3.2.13 和自制软件。

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

        /Users/gadreel/.rvm/rubies/ruby-1.9.3-p429/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/gadreel/.rvm/rubies/ruby-1.9.3-p429/bin/ruby
    --with-mysql-config
    --without-mysql-config

    file `which mysql`
    /usr/local/mysql/bin/mysql: Mach-O 64-bit executable x86_64
4

5 回答 5

46

在 Mountain Lion Rails 安装(使用 Homebrew 和 RVM)中对我有用的是编辑 /usr/local/Cellar/mysql/5.XX.XX/bin/mysql_config 并-Wno-null-conversion -Wno-unused-private-field从 cxflags 和 cxflags 选项中删除,如下所示:

前:

cflags="-I$pkgincludedir  -Wall -Wno-null-conversion -Wno-unused-private-field -Os -g -fno-strict-aliasing -DDBUG_OFF " #note: end space!
cxxflags="-I$pkgincludedir  -Wall -Wno-null-conversion -Wno-unused-private-field -Os -g -fno-strict-aliasing -DDBUG_OFF " #note: end space!

后:

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 继续没有打嗝

注意:这可能是由于 5.6.10 之后对 mysql_config 进行了更改:http://bugs.mysql.com/bug.php?id= 69645

于 2013-06-23T16:32:53.937 回答
4

使用HomebrewMacPorts之类的包管理器可以很直接地解决这个问题。直接来自 Oracle 的 MySQL 二进制发行版和与 OS X 本身捆绑在一起的发行版没有开发标头,其中mysql.h之一就是其中之一。

Homebrew 会像这样修复它:

brew install mysql

MacPorts 非常相似:

sudo port install mysql

这两个都安装库、命令行客户端和库的相关开发头文件。启用服务器是可选的。

作为替代方案,您可以直接从 Apple获取源代码并以您认为合适的方式安装它。

一般来说,自制是最好的方法。

于 2013-05-20T20:56:58.467 回答
0

安装 gem 有时涉及编译源代码。在这种情况下,MySQL gem 需要通过编译 C 代码来创建 ruby​​ 接口——您很可能需要安装 MySQL 开发文件。

(错过了之前的 OSX 参考)

于 2013-05-20T20:19:21.650 回答
0

如果您使用的是标准 XAMPP,这可能是问题所在,您可能需要安装 xampp-devel,它是 xampp 的开发包,此发行版包含 mysql 头*.h文件以及其他相关来源,您可以在在这里

您可以使用以下命令复制然后安装 geminclude中的目录:/Applications/XAMPP/xamppfiles

sudo gem install mysql2 -v 0.3.21 -- --with-mysql-config=/Applications/XAMPP/xamppfiles/bin/mysql_config --with-mysql-include=/Applications/XAMPP/xamppfiles/lib/include/ --no-ri --no-rdoc

--with-mysql-dir这个版本对我有用,如果你指定路径就不需要包含mysql_config,然后你应该得到类似的输出:

This could take a while...
Successfully installed mysql2-0.3.21
Parsing documentation for mysql2-0.3.21
Installing ri documentation for mysql2-0.3.21
Done installing documentation for mysql2 after 0 seconds
1 gem installed

您可能还需要为 rails 提供正确版本的libmysqlclient,这是使用 Symlink 的示例:

sudo ln -s /Applications/XAMPP/xamppfiles/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib

不要忘记更新捆绑包。

于 2020-10-26T18:14:54.917 回答
0

您需要安装 mysql 的开发头文件,使用 brew 您可能需要安装低于 8 的版本,因为从该发行版中删除了一些头文件。例如my_global.h被删除,因此如果您的代码使用此标头,您将被迫安装以前的版本,然后是 8。

头文件依赖

我们已经开始清理头文件依赖项,即“包含你使用的内容”和重新组织头文件以删除构建依赖项。我们修复了不明确的包含路径;几乎所有现在都应该从根开始。在例如 my_global.h 消失之后,增量增加了很多,而 sql_class.h 的重量也减少了很多。交付的客户端标头是自包含的并且更加理智。例如,客户端标头现在与平台无关(32 位和 64 位 Linux 之间没有区别)。

brew install mysql@5.7 mysql-client@5.7
于 2020-05-21T10:55:14.683 回答