【问题标题】:Perl - dyld: lazy symbol binding failed: Symbol not found: _mysql_initPerl - dyld:惰性符号绑定失败:找不到符号:_mysql_init
【发布时间】:2021-01-06 13:22:23
【问题描述】:

当我执行需要 DBD::mysql 模块的 perl 脚本时,我遇到了第一次看到的消息。

简单示例:

use DBI;
 
my $dbh = DBI->connect("DBI:mysql:db",'root','root');

$dbh->disconnect();

我正在使用 ARM64 上的 macOS 11.1,我的 perl 版本是 5.30.3,安装了 perlbrew。

消息是:

dyld: lazy symbol binding failed: Symbol not found: _mysql_init
  Referenced from: /Users/test/perl5/perlbrew/perls/perl-5.30.3/lib/site_perl/5.30.3/darwin-2level/auto/DBD/mysql/mysql.bundle
  Expected in: flat namespace

dyld: Symbol not found: _mysql_init
  Referenced from: /Users/test/perl5/perlbrew/perls/perl-5.30.3/lib/site_perl/5.30.3/darwin-2level/auto/DBD/mysql/mysql.bundle
  Expected in: flat namespace

Abort trap: 6

知道如何解决这个问题吗?

在我的.bash_profile.bashrc 中,我添加了这些行:

export PATH="/usr/local/mysql/bin:${PATH}"
export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:${DYLD_LIBRARY_PATH}"

【问题讨论】:

标签: perl


【解决方案1】:

问题是新的system integrity protection procedure,导致DYLD_LIBRARY_PATH 不能传播到子进程。具体来说,当运行 make test 时,测试子进程不会从父 shell 中获取 DYLD_LIBRARY_PATH

之前的问题是reported

另请参阅this 问题。

【讨论】:

    【解决方案2】:

    终于解决了原生安装mysql的问题。我使用 brew 重新安装了它,并将-s 传递给命令(brew install -s mysql)。所以问题是架构错误,现在为 ARM64 重新编译它也 make test 在安装 DBD::mysql 时运行良好,没有任何错误。

    希望能帮到你:)

    【讨论】:

      猜你喜欢
      • 2011-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-18
      • 2016-04-19
      相关资源
      最近更新 更多