我正在尝试在macOS Sierra(10.12.1)上安装mysql2 gem(0.4.5)并收到错误。我没有本地的mysql服务器,它是远程的。
这是错误日志:
checking for ruby/thread.h... yes
checking for rb_thread_call_without_gvl() in ruby/thread.h... yes
checking for rb_thread_blocking_region()... no
checking for rb_wait_for_single_fd()... yes
checking for rb_hash_dup()... yes
checking for rb_intern3()... yes
-----
Using mysql_config at /usr/local/bin/mysql_config
-----
checking for mysql.h... yes
checking for errmsg.h... yes
checking for mysqld_error.h... yes
-----
Don't know how to set rpath on your system, if MySQL libraries are not in path mysql2 may not load
-----
-----
Setting libpath to /usr/local/Cellar/mysql-connector-c/6.1.9/lib
-----
creating Makefile
To see why this extension failed to compile, please check the mkmf.log which can be found here:
/Users/user/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/extensions/x86_64-darwin-16/2.3.0-static/mysql2-0.4.4/mkmf.log
current directory: /Users/user/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/mysql2-0.4.4/ext/mysql2
make "DESTDIR=" clean
current directory: /Users/user/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/mysql2-0.4.4/ext/mysql2
make "DESTDIR="
compiling client.c
compiling infile.c
compiling mysql2_ext.c
compiling result.c
compiling statement.c
linking shared-object mysql2/mysql2.bundle
ld: library not found for -l-lpthread
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [mysql2.bundle] Error 1
make failed, exit code 2
有没有人遇到过类似的错误?
答案 0 :(得分:29)
<强>修正:强>
修改/usr/local/Cellar/mysql-connector-c/6.1.10/bin/mysql_config
,找到以下这一行:
libs="$libs -l "
并将其更改为
libs="$libs -l mysqlclient "
<强>解释强>
-l-lpthread
链接器不理解选项-l-lpthread
。 两个 -l-l
链接器选项相互干扰。这是因为生成的make文件中缺少库名mysqlclient
。
我尝试使用 Home Brew中的mysql2
Ruby 2.4.1 为mysql-connector-c
gem构建原生扩展时遇到此问题强>
这是在 MacOS 10.12.5 。
生成的LIBS
变量应该看起来像这样:
LIBS = $(LIBRUBYARG_SHARED) -L/usr/local/Cellar/mysql-connector-c/6.1.10/lib -l mysqlclient -lpthread -ldl -lobjc
看来变量是从文件/usr/local/Cellar/mysql-connector-c/6.1.10/bin/mysql_config
文件libs
中的mysql_config
var应包含:
libs="$libs -l mysqlclient "
而不是
libs="$libs -l "
变量embedded_libs
也可能有误?
mysql-connector-c
lib通过Home Brew
安装并构建正常,只显示文件mysql_config
不正确或生成错误。
不确定问题的原因。可能是Home Brew
,mysql-connector-c
,mysql2 gem构建过程,用户环境?
答案 1 :(得分:12)
问题是您错过了一个库,因为错误消息指示
ld:找不到-l-lpthread的库
编辑: 似乎有其他相关错误可以通过以下说明修复,即:
ld:找不到-lssl的库
我的猜测是你没有安装xcode,这恰好安装了几个库。请确保通过官方应用商店安装xcode。
可能还需要重新安装命令行工具(即使您已安装xcode并且在某些时候更新了它)。
xcode-select --install
请告诉我这是否有帮助!
答案 2 :(得分:2)
我不确定问题是mysb-connector-c公式是否在Homebrew中被破坏,或者问题出在mysql2 gem中,但是你可以通过安装mysql公式来解决这个问题。
即使您不需要本地MySQL服务器进行开发,mysql公式中的Session
版本也会正确返回链接gem的原生扩展所需的库列表。 / p>
如果您已经安装了mysql-connector-c:
mysql_config
安装mysql公式:
brew unlink mysql-connector-c
# OR
brew uninstall mysql-connector-c