未加载库:尝试在具有MySQL2的OS X 10.6上运行“ Rails服务器”时,libmysqlclient.16.dylib错误


206

我已经为此苦苦挣扎了一段时间。

我已经在Snow Leopard机器上安装了Rails 3,gem,mysql。一切顺利,直到我创建了第一个项目并尝试运行

rails server

运行后,我得到:

jontybrook$ rails server
/Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle: dlopen(/Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.16.dylib (LoadError)
  Referenced from: /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
  Reason: image not found - /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
    from /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2.rb:7
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:64:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:64:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:62:in `each'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:62:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:51:in `each'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:51:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler.rb:112:in `require'
    from /Users/jontybrook/Dropbox/CODING/simple_cms/config/application.rb:7
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:28:in `require'
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:28
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:27:in `tap'
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:27
    from script/rails:6:in `require'
    from script/rails:6
jontybrook$ 

据我所知问题出在mysql2 gem。MySQL似乎运行良好,我的Gemfile引用了mysql2,我的database.yml文件似乎也不错。

错误提到

Reason: image not found - /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

但是

jontybrook$ cd /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2
jontybrook$ ls
client.rb   em.rb       error.rb      mysql2.bundle result.rb

MySQL2.bundle在那里!?

如果我使用旧的mysql gem,则可以使用WEBrick引导程序。但这不是理想的,是吗?

我已经尝试过Google可以给我的一切!任何帮助,不胜感激。

Answers:


393

我从来没有得到任何这些答案可以为我工作,但这是我用来使其工作的命令。这样,您不需要在每次更新mysql时都使用install_name_tool

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

11
这是解决该问题的最简单正确的方法。
Voldy

2
谢谢你 上面标记的答案仅适用于一个站点,但这永久有效。它的莫塔。
fregas 2012年

12
对于那些好奇发生了什么的人,此命令从第二个位置到第一个位置建立了符号链接。当gem在下查找MySQL客户端库时/usr/lib,该链接将解析为实际安装的位置。在OS X上,通常位于/usr/local/mysql/lib,这是此命令链接的位置。如果您的库安装在其他位置,则需要调整此命令。键入locate libmysqlclient.18.dylib并将结果替换为之后的第一个参数-s
西沃恩

1
@Sean D.,当我运行时找到libmysqlclient.18.dylib,我得到此输出WARNING: The locate database (/var/db/locate.database) does not exist. To create the database, run the following command: sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist Please be aware that the database can take some time to generate; once the database has been created, this message will no longer appear.是什么问题?
GiH 2013年

1
@GiH您只需要运行告诉您的命令(sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist)。这将开始对硬盘驱动器建立索引的过程,这将使locate命令在将来运行。不过,在大多数情况下,我认为您不需要这样做,而只需使用按原样提供的命令即可。
2013年

93

我终于解决了这个!

我在RVM下重新安装了Ruby和Rails。我正在使用Ruby 1.9.2-p136版本。

在rvm下重新安装后,此错误仍然存​​在。

最后,解决它的魔术命令是:

sudo install_name_tool -change libmysqlclient.16.dylib /usr/local/mysql/lib/libmysqlclient.16.dylib ~/.rvm/gems/ruby-1.9.2-p136/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

希望这对别人有帮助!


1
这已经以某种方式重置了mysql的特权,现在我无法登录...即使使用mysql文档中所述的文件执行密码重置后也是如此。
Coderama

2
谢谢,这对我有用。对于其他具有相同问题的用户,如果您使用rvm,则跳过sudo,否则权限可能会更改。
DanneManne 2011年

2
即使您不使用RVM,magic命令也可以使用-只需更改最后一个参数以指向mysql2-0.2.6/lib/mysql2/mysql2.bundle您的gem安装位置即可。
Tobias Cohen

2
非常感谢。您到底是怎么知道的?
德里克(Derek)

7
谢谢!对于运行带有Ruby 1.9.2-p180,mysql2 gem 0.3.10的RVM 1.6.4的Mac OS X Lion,我需要一个稍微不同的命令:-Randy sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.3.10/lib/mysql2/mysql2.bundle
Eppinger


40

对我来说,这仅仅是因为我已经升级了mysql,但还没有更新mysql2 gem-重新安装gem可以解决此问题...

gem pristine mysql2


这应该是选定的答案。
El Guapo

26

我有同样的问题。似乎无法找到libmysqlclient库。对我有用的一个临时修补程序如下:

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

我不确定配置在哪里指定加载路径或将其设置为什么,但是我的mysql安装似乎不在其中。如果找到更永久的解决方案,我将再次发布。

编辑:实际上,修补程序似乎可以更准确地解决该问题。


24

将以下内容添加到您的~/.bash_profile

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

这对我有用


是的,适用于1.9.3-p448。遗憾的是这不是一个可以接受的答案。
andreimarinescu

17

在OSX El Capitan中执行以下操作时更新:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

它抛出一个错误

ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted

因此,为避免这种情况,您首先可以libmysqlclient.18.dylib使用以下命令定位

User$ locate libmysqlclient.18.dylib

就我而言,它又回来了 /usr/local/mysql-5.5.24-osx10.5-x86_64/lib/libmysqlclient.18.dylib

因此,usr/lib/我们将创建符号链接来代替usr/local/lib/这样:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib

更多详细信息:https : //forums.developer.apple.com/thread/7935


1
在El Capitan身上,我所做的只是您的最后一行:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Justin

很高兴它对某人有所帮助。:D
索尼·马修

这是elcapitan的正确答案,您的目标链接应该在该 /usr/local/lib文件夹中
Arnold Roa

13

以下几行对我有用。我正在使用mac 10.7.2。

须藤ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib


1
这就是解决我的问题的原因。谢谢!
Justin Bozonier

11

刚遇到这个问题。我要做的就是卸载mysql2 gem并重新安装它。希望这对其他人有用


1
在运行Mavericks的机器上,我删除了所有版本的mysql2 gem,并使用gem uninstall mysql2 All versions进行了提示。然后,我运行brew升级mysql,然后运行gem install mysql2。
Martin Streicher 2014年

4

这对我来说是这样的:

我运行了以下命令
sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib〜/ .rvm / gems / ruby​​-1.9.2-p180 / gems / mysql2-0.2.7 /lib/mysql2/mysql2.bundle

我的环境:
$ rails -v Rails 3.0.6

$ mysql --version
mysql Ver 14.14 Distrib 5.5.11,适用于使用readline 5.1的osx10.6(i386)

$ ruby​​ -v
ruby 1.9.2p180(2011-02-18修订版30909)[x86_64-darwin10.7.0]

希望这对某人有帮助。


3

谢谢,小贺!导出该别名对我有用,然后我跟随该链接,在我的情况下,mysql2.bundle在/Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle中启动我调整了install_name_tool来修改该捆绑包,而不是〜/ .rvm中的捆绑包,并按照应有的方式进行了工作。

所以现在:

   $ otool -L /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 
    /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle:
        /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/libruby.1.dylib (compatibility version 1.8.0, current version 1.8.7)
        /usr/local/mysql/lib/libmysqlclient.16.dylib (compatibility version 16.0.0, current version 16.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)

3

嗨,它对我有用,来自Fredy Andersen的推荐链接

sudo install_name_tool -change libmysqlclient.16.dylib /usr/local/mysql /lib/libmysqlclient.16.dylib /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

只需更改为我的mysql版本,在命令中,谢谢


3

我通过删除当前项目的gemset并重新创建它并重新运行bundle install来解决了这个问题。我认为是由安装较新版本的mysql引起的。


3

在使用Django时遇到了这个问题,我brew用来安装许多开源程序,并且由于我以前brew要进行安装,因此需要执行以下操作mysql

sudo ln -s /usr/local/Cellar/mysql/5.5.20/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

确保用您的库版本替换!


3

bundle install mysql --force帮助过我。它重新安装了由于导致消失的依赖项brew uninstall mysql


Unknown switches '--force'
阿诺德·罗阿

2

琼蒂,我也为此感到挣扎。

我认为这里有一个线索:

otool -L /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

/Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle:
    /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/libruby.1.dylib (compatibility version 1.8.0, current version 1.8.7)
    libmysqlclient.16.dylib (compatibility version 16.0.0, current version 16.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)

注意dylib的路径很短吗?

我试图弄清楚gem安装说明在dylib路径之外的地方,但是进展缓慢,因为我自己从未构建过gem。

如果发现更多信息,我会发布更多!


2

我几天前也遇到了同样的问题。我最终设法解决了。我不太确定该怎么做,但是无论如何我都会告诉你。也许会对您有帮助。

我从下载RVM开始。如果您尚未使用它,我强烈建议您使用它。基本上,它为新安装的Ruby,RoR和RubyGems创建了一个沙箱。实际上,您可以同时进行多个安装并立即切换到另一个安装。它像一种魅力。

为什么这有用?因为您不应该使用OS X中的默认Ruby安装。系统依赖于此。最好只保留默认的Ruby和RoR安装,然后使用RVM创建新的RVM,然后将其用于自己的开发。

一旦创建了单独的Ruby安装,就安装了RoR,RubyGems和mysql,它就可以正常工作。对于我采取的确切步骤,请参阅我的问题:安装Rails,MySQL等。

再说一次:我不确定这是否可以解决您的问题。但这确实对我有用,在任何情况下都强烈建议使用RVM。


2

我仍然发现,使用上述解决方案时,例如TextMate的Rails插件无法使用。我收到了类似的错误(检索数据库架构时)。

那么,要做的是打开终端:

cd /usr/local/lib
sudo ln -s ../mysql-5.5.8-osx10.6-x86_64/lib/libmysqlclient.16.dylib .

用您自己的路径(或mysql)替换mysql-5.5.8-osx10.6-x86_64

这使符号链接到lib,现在rails从命令行运行,以及TextMate插件(如ruby-on-rails-tmbundle)运行

需要明确的是:这还可以修复启动Rails服务器时遇到的错误。


2

这通常在升级mysql时发生。在旧mysql库上构建的已安装mysql2 gem无法与新库一起使用。只需要重新安装它。

使用卸载mysql2 gem uninstall mysql2。然后用gem install mysql2


1

我已通过在项目文件夹containsg中创建.rvmrc文件来解决此问题:

rvm use <yourrubie>

然后输入我的项目路径

cd ~/myprojectpath

然后我跑

bundle install

1

我的luvlss命令版本:

Mac OSX 10.10.5

MySQL 5.6.27

乘客5.0.21

sudo ln -s /usr/local/mysql-5.6.27-osx10.8-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

如果像我一样尝试许多不同的链接,请使用以下方法进行清理:

sudo unlink /usr/lib/libmysqlclient.18.dylib


1

打开一个终端并运行以下命令:

export PATH=$PATH:/usr/local/mysql/bin

它应该工作。


1
这完成了工作,谢谢!!!我很难让Django在Visual Studio Code上运行。无论我是否在virtualenv上安装mysqlclient,都会不断收到错误消息。
Irshu

0

如果使用OSX并使用brew安装mysql,则可以:

brew link mysql

如果您在版本上遇到麻烦(我的gem需要5.6.25时运行了mysql 5.7),则可以

brew unlink mysql
brew switch mysql 5.6.25

0

对我来说,我必须手动卸载mysql

brew uninstall mysql
rm -rf /usr/local/var/mysql
brew install mysql
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.