【问题标题】:Installation error for DBD::MySQL on OSX v10.6.6OSX v10.6.6 上 DBD::MySQL 的安装错误
【发布时间】:2011-01-27 20:59:35
【问题描述】:

我正在尝试让 DBD::MySQL 在 Snow Leopard (v10.6.6) 上运行。操作系统自带的默认 Perl 版本是 v5.10.0。由于我已经阅读了 64 位版本,因此我继续下载并安装了 64 位版本的 MySQL (mysql-5.5.8-osx10.6-x86_64)。

安装和设置 MySQL 很顺利,here's my config and version number for reference

我使用 CPAN 下载 DBI 和 DBD::MySQL 驱动程序。然后我:

  • 已安装 DBI
  • 设置 Makefile.PL
  • 从命令行运行 make 命令

Makefile.PL 表示它将使用以下设置进行编译和测试:

我将使用以下设置进行编译和测试: cflags (mysql_config) = -I/usr/local/mysql/include -Os -g -fno-common -fno-strict-aliasing -arch x86_64 嵌入式(mysql_config)= 库(mysql_config)= -L/usr/local/mysql/lib -lmysqlclient -lpthread mysql_config (猜测) = mysql_config nocatchstderr (默认) = 0 nofoundrows (默认) = 0 ssl(猜测)= 0 testdb(默认)= 测试 测试主机(默认)= testpassword(用户选择)= r00t! 测试套接字(默认)= testuser(用户的选择)= root 要更改这些设置,请参阅 'perl Makefile.PL --help' 和 'perldoc 安装'。 Driver.xst 的多个副本位于:/Library/Perl/5.10.0/darwin-thread-multi-2level/auto/DBI//System/Library/Perl/Extras/5.10.0/darwin-thread-multi-2level /auto/DBI/ 在 Makefile.PL 第 907 行 使用安装在 /Library/Perl/5.10.0/darwin-thread-multi-2level/auto/DBI/ 中的 DBI 1.616(用于 darwin-thread-multi-2level 上的 perl 5.010000) 为 DBD::mysql 编写 Makefile

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

t/00base........NOK 2/6# 尝试使用“DBD::mysql”。 # 错误: 无法为模块 DBD::mysql: dlopen(/用户/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 第 207 行找不到图像。 # 在 (eval 7) 第 2 行 # 在 (eval 7) 第 2 行的 require 中编译失败。 # BEGIN failed -- 编译在 (eval 7) 第 2 行中止。 失败--进一步测试停止:无法加载 DBD::mysql make: *** [test_dynamic] 错误 9

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

非常感谢。

【问题讨论】:

    标签: mysql perl osx-snow-leopard dbi dbd


    【解决方案1】:

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

    【讨论】:

    • 我遇到了 /usr/lib/ 受到“系统完整性保护”保护的问题。幸运的是 /usr/local/ 工作得很好:sudo ln -s /usr/local/mysql/lib/libmysqlclient.21.dylib /usr/local/lib/libmysqlclient.21.dylib(有关“SIP”的更多详细信息,请访问stackoverflow.com/a/36734569/668194
    【解决方案2】:

    我解决了相同或类似的问题。不知何故,我可以使用cpan 构建和测试 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
    

    显然是a 64-bit vs 32-bit issue.

    安装 fink dbd-mysql-pm5100 package 让它工作了,虽然它花了很长时间。我还删除了 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 
    

    【讨论】:

      【解决方案3】:

      也包含在 .profile 中

      export VERSIONER_PERL_PREFER_32_BIT=yes; 
      

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

      【讨论】:

        【解决方案4】:

        我知道这是一篇旧帖子。但我想最好的解决方案是将库目录添加到 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
        

        【讨论】:

          【解决方案5】:

          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
          

          【讨论】:

            【解决方案6】:

            这有点偏题,但我强烈建议在机器上设置一个单独的 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,而且很容易设置跨度>
            猜你喜欢
            • 2012-01-01
            • 2014-04-01
            • 1970-01-01
            • 1970-01-01
            • 2013-06-13
            • 1970-01-01
            • 2015-01-04
            • 1970-01-01
            相关资源
            最近更新 更多