尝试使用mysql2 gem安装应用程序时出错


84

我正在尝试安装使用mysql2gem的开源Rails 3.2.21应用程序,但是当我尝试运行bundle命令时,出现以下错误:

Fetching: mysql2-0.3.18.gem (100%)
Building native extensions.  This could take a while...
p
ERROR:  Error installing mysql2:
    ERROR: Failed to build gem native extension.

    /Users/my_username/.rvm/rubies/ruby-2.1.2/bin/ruby -r ./siteconf20150614-72129-orqsb7.rb extconf.rb
checking for ruby/thread.h... yes
checking for rb_thread_call_without_gvl() in ruby/thread.h... yes
checking for rb_thread_blocking_region()... yes
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/5.6.25/lib
-----
creating Makefile

make "DESTDIR=" clean

make "DESTDIR="
compiling client.c
compiling infile.c
compiling mysql2_ext.c
compiling result.c
linking shared-object mysql2/mysql2.bundle
ld: warning: directory not found for option '-L/Users/travis/.sm/pkg/active/lib'
ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [mysql2.bundle] Error 1

make failed, exit code 2

Gem files will remain installed in /Users/my_username/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/mysql2-0.3.18 for inspection.
Results logged to /Users/my_username/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/extensions/x86

我尝试卸载mysql通过自制软件安装的每个版本的I,然后重新安装它们,如下所示:

brew uninstall --force mysql && brew install mysql

然后运行:

sudo gem install mysql2

正如此处提出的许多类似问题所建议的那样,但仍然导致与上述相同的错误。

请有人可以提供有关如何启动和运行它的指导吗?


尝试运行“酿酒医生”,检查是否有任何错误。如果是这样,请按照说明进行操作,然后重试。
michniewicz 2015年


@ValAsensio,我在那里衷心不同意我的看法,如果可能的话,我认为您应该始终在开发中使用生产数据库。我从不在开发中使用sqlite,也没有与我合作的人使用。
尼尔斯,

@尼尔斯。是。我同意“我认为您应该始终在开发中使用生产数据库”这一观点,我的这一古老评论毫无用处。我删了它。
Elvn

Answers:


54

错误日志显示:

ld: library not found for -lssl

因此,您需要安装libssl

brew install openssl

正如评论中指出的那样,可能需要将路径导出到库。

export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/

27
那还不够,一个人需要以后像这样将其导出:export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/
Gilg Him

export LIBRARY_PATH = $ LIBRARY_PATH:/ usr / local / opt / openssl / lib /`经过长时间的尝试,对我有用。谢谢!!
阿比(Abhi)

161

对于仍然遇到问题的任何人:

通过brew安装openssl时,应显示以下消息:

苹果已经弃用OpenSSL,而是使用自己的TLS和加密库

通常,这对您没有任何后果。如果您构建自己的软件并且需要此公式,则需要添加到构建变量中:

LDFLAGS:-L / usr / local / opt / openssl / lib
CPPFLAGS:-I / usr / local / opt / openssl / include
PKG_CONFIG_PATH:/ usr / local / opt / openssl / lib / pkgconfig

您可以通过运行以下命令来设置这些构建标志(对于本地应用程序):

bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include"

这对我有用。

有关更多信息,请参见捆绑程序的文档


79
如果您只想使用gem install,则可以使用以下方法: gem install mysql2 -v '0.3.21' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include
niels,2016年

^^^ @niels应该是答案... Alessandro在Sierra上不起作用(“警告:拒绝链接:open ssl ...”->与过时的openssl系统有关)
the12

2
@ the12 niels的解决方案是针对的gem install,我的是针对的bundle install。您到底遇到了什么问题,您可以发布该错误吗?我发布的解决方案仍然适用于我。
亚历山德罗·贝拉迪

1
我从尝试开始bundle install依赖于mysql的仓库开始。@AlessandroBerardi的解决方案对我不起作用;@niels'做到了。:/
vergenzt

3
--with-cppflags在最新的OSX上似乎已中断。我相信可以省略。bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib"
Xavier Shay

36

对我来说,解决方案是安装Xcode命令行工具。

我最近通过Mac App Store更新了Xcode,每次这样做,我都发现我必须重新安装命令行工具。

xcode-select --install

34

试试这个:

gem install mysql2 -v '0.5.2' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include

(根据需要更新版本)


1
鉴于未找到SSL库,这是正确的方法,对我来说很好用。
TehJabbit

2
首先安装,brew install openssl然后gem install mysql2 -v '0.4.10' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include 为我工作,谢谢!
Touseef Murtaza

1
@TouseefMurtaza您的回答对我有用-谢谢!
贾里德(Jared)

👋亲爱的未来自我。现在,您已经阅读了两次此答案。这可以根据您的情况解决!现在出发,用你的时间来换代码,用你的代码换钱。
DaveWoodall.com

28

根据这里的解决方案

brew install openssl

export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/

解决了问题。


1
export确实有帮助。即使使用现有的openssl,路径也会丢失。
Yakob Ubaidi

10

感谢@mudasobwa为我指出正确的方向。原来,错误是由未链接的openssl文件引起的,因此运行:

brew reinstall openssl && brew link openssl --force 

解决了问题。我在这里找到解决方案:OpenSSL,RVM,Brew,冲突错误


3

命令的组合解决了我。我在莫哈韦沙漠上。

brew reinstall openssl && brew link openssl --force

然后

gem install mysql2 -v '0.4.10' -- \
  --with-ldflags=-L/usr/local/opt/openssl/lib \
  --with-cppflags=-I/usr/local/opt/openssl/include


2

更新Homebrew(openssl@1.1)之后,有一个用于libs的新路径,因此可以使用:

bundle config build.mysql2 --with-opt-dir=$(brew --prefix openssl)
bundle install

它将修复 ld: library not found for -lssl error


1

似乎您错过了构建mysql2gem所需的主要文件

sudo apt-get install libsqlite3-dev libmysqlclient-dev -y

libsqlite3-dev 不是必需的,但因为它是默认的Rails DB,所以要安装它。


-1

我发现我不得不使用--with-opt-dir=/usr/local/opt

具体来说,我在~/.bundle/config文件中添加了以下内容:

BUNDLE_BUILD__MYSQL2: "--with-opt-dir=/usr/local/opt"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.