在OSX v10.6.6上安装DBD::MySQL出现错误

7
我正在尝试在Snow Leopard(v10.6.6)上使用DBD :: MySQL。操作系统自带的默认Perl版本是v5.10.0。因为我读到它是64位的,所以我下载并安装了一个64位版本的MySQL(mysql-5.5.8-osx10.6-x86_64)。
安装和设置MySQL很顺利,在此提供配置和版本号以供参考。
我使用CPAN下载了DBI和DBD :: MySQL驱动程序。然后我:
- 安装了DBI - 设置了Makefile.PL - 从命令行运行了make命令
Makefile.PL表示将使用以下设置进行编译和测试: ``` I will use the following settings for compiling and testing:
cflags (mysql_config ) = -I/usr/local/mysql/include -Os -g -fno-common -fno-strict-aliasing -arch x86_64 embedded (mysql_config ) = libs (mysql_config ) = -L/usr/local/mysql/lib -lmysqlclient -lpthread mysql_config (guessed ) = mysql_config nocatchstderr (default ) = 0 nofoundrows (default ) = 0 ssl (guessed ) = 0 testdb (default ) = test testhost (default ) = testpassword (User's choice) = r00t! testsocket (default ) = testuser (User's choice) = root
要更改这些设置,请参见“perl Makefile.PL --help”和“perldoc INSTALL”。
在/ Library / Perl / 5.10.0 / darwin-thread-multi-2level / auto / DBI /和/ System / Library / Perl / Extras / 5.10.0 / darwin-thread-multi-2level / auto / DBI /中找到了多个Driver.xst的副本。在Makefile.PL第907行,使用DBI 1.616(适用于darwin-thread-multi-2level上的perl 5.010000)安装在/Library/Perl/5.10.0/darwin-thread-multi-2level/auto/DBI/中。
为DBD :: mysql编写Makefile。 ```
一切似乎都很顺利,直到我尝试运行make test:
t/00base....................NOK 2/6#     尝试使用'DBD::mysql'。
#     错误: 无法加载'/Users/swm/.cpan/build/DBD-mysql-4.018-Pnd2qz/blib/arch/auto/DBD/mysql/mysql.bundle',用于模块DBD::mysql: dlopen(/Users/swm/.cpan/build/DBD-mysql-4.018-Pnd2qz/blib/arch/auto/DBD/mysql/mysql.bundle, 2): 找不到库: libmysqlclient.16.dylib
#   引用自: /Users/swm/.cpan/build/DBD-mysql-4.018-Pnd2qz/blib/arch/auto/DBD/mysql/mysql.bundle
#   原因: 图像未找到于/System/Library/Perl/5.10.0/darwin-thread-multi-2level/DynaLoader.pm line 207.
#  at (eval 7) line 2
# 编译失败需要的是require at (eval 7) line 2.
# BEGIN failed--compilation aborted at (eval 7) line 2.
FAILED--进一步测试停止: 无法加载DBD::mysql
make: *** [test_dynamic] Error 9

它失败了,因为似乎找不到DBD的mysql.bundle。有人遇到过这个问题吗?或者可以指导我下一步该尝试什么?我需要DBI/DBD::MySQL来做我的新工作,我正在努力寻找解决方案。

非常感谢。

6个回答

14

我通过在 /usr/lib/ 中放置一个符号链接指向 /usr/local/mysql-5.5.8-osx10.6-x86_64/lib/libmysqlclient.16.dylib,解决了 "Library not loaded: libmysqlclient.16.dylib" 问题。


我遇到了“系统完整性保护”保护的 /usr/lib/ 问题。幸运的是,_/usr/local/_ 完全正常:sudo ln -s /usr/local/mysql/lib/libmysqlclient.21.dylib /usr/local/lib/libmysqlclient.21.dylib(有关“SIP”的更多详细信息,请参见 https://dev59.com/71oV5IYBdhLWcg3wErWD#36734569) - Gonnagle

1

还要在 .profile 中包含

export VERSIONER_PERL_PREFER_32_BIT=yes; 

除了创建链接之外,使用DBI::mysql执行程序时出现错误,因此将该变量包含在环境中可以使其正常工作。

1

我解决了同样或类似的问题。不知怎么的,我可以用构建和测试DBD :: mysql ,但当我试图在脚本中使用它时,它会显示诸如此类的信息

dyld: lazy symbol binding failed: Symbol not found: _mysql_init
  Referenced from: /Library/Perl/5.10.0/darwin-thread-multi-2level/auto/DBD/mysql/mysql.bundle
  Expected in: flat namespace

显然,这是一个64位与32位的问题。

安装fink的dbd-mysql-pm5100包使它工作了,尽管花费了相当长的时间。我还删除了cpan安装的版本:

sudo rm -rf /Library/Perl/5.10.0/darwin-thread-multi-2level/auto/DBD/mysql
sudo rm -rf /Library/Perl/5.10.0/darwin-thread-multi-2level/DBD/mysql
sudo rm -rf /Library/Perl/5.10.0/darwin-thread-multi-2level/DBD/mysql.pm 

1
我知道这是一个旧帖子。但我认为最好的解决方案是将库目录添加到DYLD_FALLBACK_LIBRARY_PATH环境变量中。(原因在这里: https://dev59.com/3nA75IYBdhLWcg3ws7ci#3172515)
在Mac上没有ldconfig,所以只需将路径添加到此环境变量中,并重新运行DBD::mysql的安装过程。
Donato-Vianas-MacBook-Pro:Invoicer donato$ cpanm DBD::mysql
--> Working on DBD::mysql
Fetching http://www.cpan.org/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.022.tar.gz ... OK
Configuring DBD-mysql-4.022 ... OK
Building and testing DBD-mysql-4.022 ... FAIL
! Installing DBD::mysql failed. See /Users/donato/.cpanm/build.log for details.

#   Failed test 'use DBD::mysql;'
#   at t/00base.t line 21.
#     Tried to use 'DBD::mysql'.
#     Error:  Can't load '/Users/donato/.cpanm/work/1359948144.491/DBD-mysql-4.022/blib/arch/auto/DBD/mysql/mysql.bundle' for module DBD::mysql: dlopen(/Users/donato/.cpanm/work/1359948144.491/DBD-mysql-4.022/blib/arch/auto/DBD/mysql/mysql.bundle, 2): Library not loaded: libmysqlclient.18.dylib

Donato-Vianas-MacBook-Pro:Invoicer donato$ export DYLD_FALLBACK_LIBRARY_PATH=/usr/local/mysql/lib/:$DYLD_FALLBACK_LIBRARY_PATH
Donato-Vianas-MacBook-Pro:Invoicer donato$ cpanm DBD::mysql--> Working on DBD::mysql
Fetching http://www.cpan.org/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.022.tar.gz ... OK
Configuring DBD-mysql-4.022 ... OK
Building and testing DBD-mysql-4.022 ... OK
Successfully installed DBD-mysql-4.022
1 distribution installed

1
Donato的解决方案适用于安装,但是变量也必须在运行时存在,否则我会遇到相同的错误。以下内容可在shell和_www用户的运行时修复此问题:
# For command line use, add following line to ~/.bash_profile:
export DYLD_FALLBACK_LIBRARY_PATH=/usr/local/mysql/lib/:$DYLD_FALLBACK_LIBRARY_PATH

# If Apache needs it, add following line to /etc/apache2/httpd.conf:
# On Lion Server, I put it after <IfDefine MACOSXSERVER>, but shouldn't matter
SetEnv DYLD_FALLBACK_LIBRARY_PATH /usr/local/mysql/lib/:$DYLD_FALLBACK_LIBRARY_PATH

0

这是一个旁注,但我强烈建议在机器上设置一个单独的perl - 无论是通过fink / macports还是从源代码安装 - 并且不要碰Mac系统自带的perl(及其库)。

一旦我在自己的Mac上这样做了,之后安装模块时就几乎没有遇到什么问题,而且我也不必担心意外破坏系统使用的perl而导致系统出现问题。

如果这是我的Mac,我会从源代码安装一个新的perl(Perl源代码分发已经足够聪明,可以看到它在Mac上并且可以安全地安装到/usr/local/bin中),然后继续安装DBD::Mysql(和其他所需的模块)。


使用MacPorts安装的Perl5.12(同时也会安装到/usr/local/bin目录下),再配合local::lib模块,不会对系统自带的Perl产生任何干扰,并且非常容易设置。 - matthias krull

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接