brew 安装mysql5.6_MacOS 10.14安装和brew更新后无法安装mysql gem

在更新Brew后,作者遇到了在macOS 10.14上安装mysql gem的问题,错误显示找不到必要的头文件。通过检查mkmf.log,发现编译扩展时缺少mysql.h。解决方案是安装macOS SDK头文件包,通过运行`sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /`来解决这个问题。
摘要由CSDN通过智能技术生成

在macOS 10.14安装Brew更新后,我的开发系统坏了.

我无法安装mysql gem.在尝试安装时,我得到:

$gem install mysql -v '2.8.1' --source 'http://rubygems.org/'

Building native extensions. This could take a while...

ERROR: Error installing mysql:

ERROR: Failed to build gem native extension.

current directory: /Users/MYACCOUNT/.rvm/gems/ruby-1.8.7-p374@WEBPROJECT/gems/mysql-2.8.1/ext/mysql_api

/Users/MYACCOUNT/.rvm/rubies/ruby-1.8.7-p374/bin/ruby -r ./siteconf20180926-49343-waujia-0.rb extconf.rb

checking for mysql_ssl_set()... yes

checking for rb_str_set_len()... yes

checking for rb_thread_start_timer()... yes

checking for mysql.h... no

checking for mysql/mysql.h... no

*** 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/MYACCOUNT/.rvm/rubies/ruby-1.8.7-p374/bin/ruby

--with-mysql-config

--without-mysql-config

To see why this extension failed to compile, please check the mkmf.log which can be found here:

/Users/MYACCOUNT/.rvm/gems/ruby-1.8.7-p374@WEBPROJECT/extensions/x86-darwin-14/1.8/mysql-2.8.1/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in /Users/MYACCOUNT/.rvm/gems/ruby-1.8.7-p374@WEBPROJECT/gems/mysql-2.8.1 for inspection.

Results logged to /Users/MYACCOUNT/.rvm/gems/ruby-1.8.7-p374@WEBPROJECT/extensions/x86-darwin-14/1.8/mysql-2.8.1/gem_make.out

相对mkmf.log是:

have_func: checking for mysql_ssl_set()... -------------------- yes

"/usr/local/bin/gcc-4.9 -o conftest -I. -I/Users/MYACCOUNT/.rvm/rubies/ruby-1.8.7-p374/lib/ruby/1.8/i686-darwin14.4.0 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -I/usr/local/Cellar/mysql/5.7.21/include/mysql -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl098/include -O2 -fno-tree-dce -fno-optimize-sibling-calls -fno-common -pipe -fno-common conftest.c -L. -L/Users/MYACCOUNT/.rvm/rubies/ruby-1.8.7-p374/lib -L. -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl098/lib -L/usr/local/Cellar/mysql/5.7.21/lib -lmysqlclient -lssl -lcrypto -lruby-static -L/usr/local/Cellar/mysql/5.7.21/lib -lmysqlclient -lssl -lcrypto -ldl -lobjc "

conftest.c: In function 't':

conftest.c:3:53: error: 'mysql_ssl_set' undeclared (first use in this function)

int t() { void ((*volatile p)()); p = (void ((*)()))mysql_ssl_set; return 0; }

^

conftest.c:3:53: note: each undeclared identifier is reported only once for each function it appears in

checked program was:

/* begin */

1: /*top*/

2: int main() { return 0; }

3: int t() { void ((*volatile p)()); p = (void ((*)()))mysql_ssl_set; return 0; }

/* end */

"/usr/local/bin/gcc-4.9 -o conftest -I. -I/Users/MYACCOUNT/.rvm/rubies/ruby-1.8.7-p374/lib/ruby/1.8/i686-darwin14.4.0 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -I/usr/local/Cellar/mysql/5.7.21/include/mysql -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl098/include -O2 -fno-tree-dce -fno-optimize-sibling-calls -fno-common -pipe -fno-common conftest.c -L. -L/Users/MYACCOUNT/.rvm/rubies/ruby-1.8.7-p374/lib -L. -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl098/lib -L/usr/local/Cellar/mysql/5.7.21/lib -lmysqlclient -lssl -lcrypto -lruby-static -L/usr/local/Cellar/mysql/5.7.21/lib -lmysqlclient -lssl -lcrypto -ldl -lobjc "

ld: warning: directory not found for option '-L/usr/local/opt/openssl098/lib'

checked program was:

/* begin */

1: /*top*/

2: int main() { return 0; }

3: int t() { mysql_ssl_set(); return 0; }

/* end */

--------------------

have_func: checking for rb_str_set_len()... -------------------- yes

"/usr/local/bin/gcc-4.9 -o conftest -I. -I/Users/MYACCOUNT/.rvm/rubies/ruby-1.8.7-p374/lib/ruby/1.8/i686-darwin14.4.0 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -I/usr/local/Cellar/mysql/5.7.21/include/mysql -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl098/include -O2 -fno-tree-dce -fno-optimize-sibling-calls -fno-common -pipe -fno-common conftest.c -L. -L/Users/MYACCOUNT/.rvm/rubies/ruby-1.8.7-p374/lib -L. -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl098/lib -L/usr/local/Cellar/mysql/5.7.21/lib -lmysqlclient -lssl -lcrypto -lruby-static -L/usr/local/Cellar/mysql/5.7.21/lib -lmysqlclient -lssl -lcrypto -ldl -lobjc "

conftest.c: In function 't':

conftest.c:3:53: error: 'rb_str_set_len' undeclared (first use in this function)

int t() { void ((*volatile p)()); p = (void ((*)()))rb_str_set_len; return 0; }

^

conftest.c:3:53: note: each undeclared identifier is reported only once for each function it appears in

checked program was:

/* begin */

1: /*top*/

2: int main() { return 0; }

3: int t() { void ((*volatile p)()); p = (void ((*)()))rb_str_set_len; return 0; }

/* end */

"/usr/local/bin/gcc-4.9 -o conftest -I. -I/Users/MYACCOUNT/.rvm/rubies/ruby-1.8.7-p374/lib/ruby/1.8/i686-darwin14.4.0 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -I/usr/local/Cellar/mysql/5.7.21/include/mysql -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl098/include -O2 -fno-tree-dce -fno-optimize-sibling-calls -fno-common -pipe -fno-common conftest.c -L. -L/Users/MYACCOUNT/.rvm/rubies/ruby-1.8.7-p374/lib -L. -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl098/lib -L/usr/local/Cellar/mysql/5.7.21/lib -lmysqlclient -lssl -lcrypto -lruby-static -L/usr/local/Cellar/mysql/5.7.21/lib -lmysqlclient -lssl -lcrypto -ldl -lobjc "

ld: warning: directory not found for option '-L/usr/local/opt/openssl098/lib'

checked program was:

/* begin */

1: /*top*/

2: int main() { return 0; }

3: int t() { rb_str_set_len(); return 0; }

/* end */

--------------------

have_func: checking for rb_thread_start_timer()... -------------------- yes

"/usr/local/bin/gcc-4.9 -o conftest -I. -I/Users/MYACCOUNT/.rvm/rubies/ruby-1.8.7-p374/lib/ruby/1.8/i686-darwin14.4.0 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -I/usr/local/Cellar/mysql/5.7.21/include/mysql -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl098/include -O2 -fno-tree-dce -fno-optimize-sibling-calls -fno-common -pipe -fno-common conftest.c -L. -L/Users/MYACCOUNT/.rvm/rubies/ruby-1.8.7-p374/lib -L. -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl098/lib -L/usr/local/Cellar/mysql/5.7.21/lib -lmysqlclient -lssl -lcrypto -lruby-static -L/usr/local/Cellar/mysql/5.7.21/lib -lmysqlclient -lssl -lcrypto -ldl -lobjc "

conftest.c: In function 't':

conftest.c:3:53: error: 'rb_thread_start_timer' undeclared (first use in this function)

int t() { void ((*volatile p)()); p = (void ((*)()))rb_thread_start_timer; return 0; }

^

conftest.c:3:53: note: each undeclared identifier is reported only once for each function it appears in

checked program was:

/* begin */

1: /*top*/

2: int main() { return 0; }

3: int t() { void ((*volatile p)()); p = (void ((*)()))rb_thread_start_timer; return 0; }

/* end */

"/usr/local/bin/gcc-4.9 -o conftest -I. -I/Users/MYACCOUNT/.rvm/rubies/ruby-1.8.7-p374/lib/ruby/1.8/i686-darwin14.4.0 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -I/usr/local/Cellar/mysql/5.7.21/include/mysql -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl098/include -O2 -fno-tree-dce -fno-optimize-sibling-calls -fno-common -pipe -fno-common conftest.c -L. -L/Users/MYACCOUNT/.rvm/rubies/ruby-1.8.7-p374/lib -L. -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl098/lib -L/usr/local/Cellar/mysql/5.7.21/lib -lmysqlclient -lssl -lcrypto -lruby-static -L/usr/local/Cellar/mysql/5.7.21/lib -lmysqlclient -lssl -lcrypto -ldl -lobjc "

ld: warning: directory not found for option '-L/usr/local/opt/openssl098/lib'

checked program was:

/* begin */

1: /*top*/

2: int main() { return 0; }

3: int t() { rb_thread_start_timer(); return 0; }

/* end */

--------------------

have_header: checking for mysql.h... -------------------- no

"/usr/local/bin/gcc-4.9 -E -I. -I/Users/MYACCOUNT/.rvm/rubies/ruby-1.8.7-p374/lib/ruby/1.8/i686-darwin14.4.0 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -I/usr/local/Cellar/mysql/5.7.21/include/mysql -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl098/include -O2 -fno-tree-dce -fno-optimize-sibling-calls -fno-common -pipe -fno-common conftest.c -o conftest.i"

In file included from conftest.c:1:0:

/usr/local/Cellar/mysql/5.7.21/include/mysql/mysql.h:35:23: fatal error: sys/types.h: No such file or directory

#include

^

compilation terminated.

checked program was:

/* begin */

1: #include

/* end */

--------------------

have_header: checking for mysql/mysql.h... -------------------- no

"/usr/local/bin/gcc-4.9 -E -I. -I/Users/MYACCOUNT/.rvm/rubies/ruby-1.8.7-p374/lib/ruby/1.8/i686-darwin14.4.0 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -I/usr/local/Cellar/mysql/5.7.21/include/mysql -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl098/include -O2 -fno-tree-dce -fno-optimize-sibling-calls -fno-common -pipe -fno-common conftest.c -o conftest.i"

In file included from conftest.c:1:0:

/usr/local/include/mysql/mysql.h:35:23: fatal error: sys/types.h: No such file or directory

#include

^

compilation terminated.

checked program was:

/* begin */

1: #include

/* end */

--------------------

我通过Brew安装了mysql并保持mysql,mysql @ 5.6或mysql@5.7有效.路径在.bash_profile中设置:

### Customize path for MYSQL

MYSQL=/usr/local/mysql/bin

export PATH=$PATH:$MYSQL

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

当我切换到mysql@5.6或5.7时,我相应地改变了路径.

一般来说,mysql似乎存在一些问题.

当Ruby 1.8.7中的一个webapp,运行mysql数据库的Rails 3.2.5时,另外两个具有相同技术堆栈的webapp无法重新安装mysql gem或连接到数据库.

$rake db:migrate --trace

** Invoke db:migrate (first_time)

** Invoke environment (first_time)

** Execute environment

rake aborted!

Mysql::Error: Table 'dev_WEBPROJECT.safts' doesn't exist: SHOW FULL FIELDS FROM `safts`

/Users/MYACCOUNT/.rvm/gems/ruby-1.8.7-p374@WEBPROJECT/gems/activerecord-3.2.5/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:243:in `query'

/Users/MYACCOUNT/.rvm/gems/ruby-1.8.7-p374@WEBPROJECT/gems/activerecord-3.2.5/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:243:in `execute'

/Users/MYACCOUNT/.rvm/gems/ruby-1.8.7-p374@WEBPROJECT/gems/activerecord-3.2.5/lib/active_record/connection_adapters/abstract_adapter.rb:280:in `log'

.

.

.

/Users/MYACCOUNT/.rvm/gems/ruby-1.8.7-p374@WEBPROJECT/gems/rake-0.9.6/lib/rake/application.rb:70:in `run'

/Users/MYACCOUNT/.rvm/gems/ruby-1.8.7-p374@WEBPROJECT/gems/rake-0.9.6/bin/rake:37

/Users/MYACCOUNT/.rvm/gems/ruby-1.8.7-p374@WEBPROJECT/bin/rake:22:in `load'

/Users/MYACCOUNT/.rvm/gems/ruby-1.8.7-p374@WEBPROJECT/bin/rake:22

/Users/MYACCOUNT/.rvm/gems/ruby-1.8.7-p374@WEBPROJECT/bin/ruby_executable_hooks:15

Tasks: TOP => db:migrate => environment

有人可以帮忙吗?

解决方法:

Mojave更改了编译C扩展所需的头文件的位置.您可能需要运行以下命令来安装mysql gem:

sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /

https://www.icode9.com/content-2-417651.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值