7

我正在尝试让 DBD::MySQL 在 Snow Leopard (v10.6.6) 上工作。操作系统自带的默认 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

To change these settings, see 'perl Makefile.PL --help' and
'perldoc INSTALL'.

Multiple copies of Driver.xst found in: /Library/Perl/5.10.0/darwin-thread-multi-2level/auto/DBI/ /System/Library/Perl/Extras/5.10.0/darwin-thread-multi-2level/auto/DBI/ at Makefile.PL line 907
Using DBI 1.616 (for perl 5.010000 on darwin-thread-multi-2level) installed in /Library/Perl/5.10.0/darwin-thread-multi-2level/auto/DBI/
Writing Makefile for DBD::mysql

一切似乎都很好,直到我尝试运行make test

t/00base....................NOK 2/6#     Tried to use 'DBD::mysql'.          
#     Error:  Can't load '/Users/swm/.cpan/build/DBD-mysql-4.018-Pnd2qz/blib/arch/auto/DBD/mysql/mysql.bundle' for module DBD::mysql: dlopen(/Users/swm/.cpan/build/DBD-mysql-4.018-Pnd2qz/blib/arch/auto/DBD/mysql/mysql.bundle, 2): Library not loaded: libmysqlclient.16.dylib
#   Referenced from: /Users/swm/.cpan/build/DBD-mysql-4.018-Pnd2qz/blib/arch/auto/DBD/mysql/mysql.bundle
#   Reason: image not found at /System/Library/Perl/5.10.0/darwin-thread-multi-2level/DynaLoader.pm line 207.
#  at (eval 7) line 2
# Compilation failed in require at (eval 7) line 2.
# BEGIN failed--compilation aborted at (eval 7) line 2.
FAILED--Further testing stopped: Unable to load DBD::mysql
make: *** [test_dynamic] Error 9

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

提前谢谢了。

4

6 回答 6

14

我通过在 /usr/lib/ 中放置符号链接到 /usr/local/mysql-5.5.8-osx10.6-x86_64/lib/libmysqlclient 来解决“未加载库:libmysqlclient.16.dylib”问题。 16.dylib

于 2011-02-10T22:44:01.263 回答
1

我解决了相同或类似的问题。不知何故,我可以构建和测试 DBD::mysql ,cpan但是当我尝试在脚本中使用它时,它会说类似

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 
于 2011-03-18T04:27:08.547 回答
1

也包括在 .profile

export VERSIONER_PERL_PREFER_32_BIT=yes; 

除了创建链接之外,程序的执行还会DBI::mysql产生错误,因此在环境中包含此变量使其工作

于 2012-03-13T08:49:50.883 回答
1

Donato 的解决方案适用于安装,但 var 也必须在运行时出现,否则我会遇到相同的错误。以下为 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
于 2013-05-14T21:39:54.623 回答
1

我知道这是一个旧帖子。但我想最好的解决方案是将库目录添加到 DYLD_FALLBACK_LIBRARY_PATH 环境变量中。(原因在这里:https ://stackoverflow.com/a/3172515/119958 )

mac 中没有 ldconfig,所以只需添加此 env var 的路径并重新运行 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
于 2013-02-04T03:39:26.720 回答
0

这有点偏题了,但我强烈建议在机器上设置一个单独的 perl——通过 fink/macports 或从源代码——并且不理会 Mac 的系统 perl(及其库)。

一旦我在自己的 Mac 上执行此操作,此后安装模块的麻烦就很少了,而且我不必担心通过破坏系统使用的 perl 会意外地在我的操作系统中炸出一个洞。

如果是我的 Mac,我会从源代码安装一个新的 perl(Perl 源代码发行版足够聪明,可以自行安装,看到它在 Mac 上并安全地安装到 /usr/local/bin 中)然后从你开始安装 DBD::Mysql (以及您需要的其他模块)。

于 2011-01-29T05:17:30.443 回答