无法在OS X上安装mysql gem

时间:2014-03-10 22:20:16

标签: mysql ruby macos gem clang

我正在做一个

  

sudo gem install mysql

在OS X上安装mysql gem。这失败,输出如下:

  

构建原生扩展。这可能需要一段时间......

     

错误:安装mysql时出错:

     

错误:无法构建gem原生扩展。

     

/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb

     

检查mysql_ssl_set()...是

     

检查rb_str_set_len()...是

     

检查rb_thread_start_timer()...否

     

检查mysql.h ...是

     

创建Makefile

     

使“DESTDIR =”清洁

     

制作“DESTDIR =”

     

编译mysql.c

     

链接共享对象mysql / mysql_api.bundle

     

clang:错误:未知参数:' - multiply_definedsuppress'[-Wunused-command-line->参数-硬误差中的将来]

     

clang:注意:将来这将是一个很难的错误(不能降级为警告)

     

make: * [mysql_api.bundle]错误1

     

make failed,退出代码2

     

Gem文件将保留在/Library/Ruby/Gems/2.0.0/gems/mysql-2.9.1中以供检查。

     

结果记录到/Library/Ruby/Gems/2.0.0/extensions/universal-darwin-13/2.0.0/mysql-2.9.1/gem_make.out

知道可能导致这种情况的原因是什么?如果有所作为,我安装了自制的mysql。

4 个答案:

答案 0 :(得分:59)

From Apple's Xcode/Clang release notes:

  

Xcode 5.1中的Apple LLVM编译器将无法识别的命令行选项视为错误。在构建Python本机扩展和Ruby Gems时已经看到了这个问题,其中当前指定了一些无效的编译器选项。   需要更改使用无效编译器选项的项目以删除这些选项。为了帮助简化转换,编译器将暂时接受将错误降级为警告的选项:

     

-Wno-error=unused-command-line-argument-hard-error-in-future

     

ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future gem install GemName

答案 1 :(得分:7)

似乎是Apple的rbconfig.rb:

的问题
$ grep -n DLDFLAGS /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/universal-darwin13/rbconfig.rb
82:  CONFIG["LIBRUBY_DLDFLAGS"] = "-undefineddynamic_lookup -multiply_definedsuppress -install_name $(libdir)/$(LIBRUBY_SO) -current_version $(MAJOR).$(MINOR).$(TEENY) -compatibility_version $(ruby_version)  $(XLDFLAGS)"
84:  CONFIG["EXTDLDFLAGS"] = ""
125:  CONFIG["DLDFLAGS"] = "-undefineddynamic_lookup -multiply_definedsuppress"

删除-multiply_definedsuppress应该允许它安装。

答案 2 :(得分:1)

这是由于Xcode 5.1 - 它已被报告为Ruby的错误。

https://bugs.ruby-lang.org/issues/9624

这里还有一些额外的讨论: Ruby Gem install Json fails on Mavericks and Xcode 5.1 - unknown argument: '-multiply_definedsuppress'

答案 3 :(得分:1)

以上答案是正确的。最简单的解决方法是重建机器上的红宝石。 Gem扩展在它自身构建时使用ruby构建配置,如果你在Xcode 5.1之前构建了ruby,它的构建配置包含违规标记。

这应该可以解决所有受影响的宝石。