将 Ubuntu 16.04 LTS 升级到 18.04 LTS 后,所有 Perl 模块和“cpan”停止工作。每次我运行脚本都会导致错误
threads.c: loadable library and Perl binaries are mismatched (got handshake key 0xdb00080, needed 0xde00080)
当我尝试打开 cpan 时,它显示
Cwd.c: loadable library and Perl binaries are mismatched (got handshake key 0xdb00080, needed 0xde00080)
我在 ubuntu 16.04 中安装了“Cwd”、“threads”模块,其中 Perl 版本为 5.22.1,而在 ubuntu 18.04 中 Perl 版本为 5.26.1。
我尝试删除旧版本的模块但失败了。我删除了 ~/.cpan 文件夹中的内容。
PS: 在 root 用户中一切正常。 如果我跑
sudo su
cpan
工作完美。但作为普通用户,我无法运行任何 perl 模块/脚本/cpan。
我该如何纠正这个问题? 如何重新安装 cpan 或 cpan 模块?
我尝试重新安装 Perl,但没有帮助
sudo apt-get --reinstall install perl
sudo apt-get --reinstall install libcwd-guard-perl
我安装了 cpan minus、cpan plus ,但出现了同样的错误。
为了解决问题,可以使用下一个链接:
https://dev.to/foursixnine/about-perl-and-mismatched-binaries-346l https://metacpan.org/pod/release/DBOOK/App-MigrateModules-0.002/script/perl-migrate-modules
或者在命令中:(替换为你的 perl5 文件夹,在我的例子中是 ~/perl5)
mv <perl5> perl5_old
cpan
cpan App::MigrateModules
perl-migrate-modules --from perl5_old /usr/bin/perl
其中 perl5 你的 perl 文件夹,通常在路径中存在于 ENV 变量 PERL5LIB 中。
我通过以下方式解决了这个问题https://github.com/Perl/perl5/issues/15861
我运行了命令
perl -MCPAN -e 'recompile()'
重新编译所有模块,终于成功了。
我在通过 Singularity 容器运行生物信息学工具“BRAKER3”时也遇到了这个问题。
大多数答案都指向Root安装的Perl和user安装的Perl库之间的冲突。
没有 Root 访问权限,我通过删除用户(我)安装的 Perl 库的所有环境变量(例如
$PERL5LIB
)并添加 export PERL5LIB="/usr/lib/perl5:/usr/local/lib/perl5"
到我的脚本中来解决这个问题,并真正使用 Root 构建的 Perl 东西。
雁阳, 最好的。