如何将 Perl DBI 模块的所有依赖项添加到 PAR 打包器存档中



我创建了一个Perl脚本,它使用DBI包连接到MySQL数据库。为了使它运行在其他不一定安装所有依赖项的 linux 平台上,我正在使用以下命令创建一个单独的文件,其中包含所有具有 Par Packer (pp( 的依赖项:

pp -c -x -o myscript myscript.pl

独立文件在创建它的机器上工作正常,但是,在其他机器上,我在执行 DBI -> connect(( 的行收到以下错误。

install_driver(mysql) failed: Can't load '/tmp/par-6d756e7a/cache-44c3853ef3002ad860cfe135d24ccc8829af39da/89fc0e43.so' for module DBD::mysql: libmysqlclient.so.20: cannot open shared object file: No such file or directory at /usr/lib/x86_64-linux-gnu/perl/5.22/DynaLoader.pm line 187.
at /usr/local/share/perl/5.22.1/PAR/Heavy.pm line 123.
Compilation failed in require at (eval 15) line 3.
Perhaps a required shared library or dll isn't installed where expected
at DBI/DBHandler.pm line 41.

似乎缺少文件,但我不知道如何修复它。添加-lib=/tmp/par-6d756e7a/cache-44c3853ef3002ad860cfe135d24ccc8829af39da/89fc0e43.so不起作用。

更新 1

发生错误的服务器上已安装以下库:

$ dpkg -l | grep mysql
ii  libdbd-mysql-perl                    4.028-2+deb8u2               amd64        Perl5 database interface to the MySQL database
ii  libmysqlclient18:amd64               5.5.54-0+deb8u1              amd64        MySQL database client library
ii  mysql-client                         5.5.54-0+deb8u1              all          MySQL database client (metapackage depending on the latest version)
ii  mysql-client-5.5                     5.5.54-0+deb8u1              amd64        MySQL database client binaries
ii  mysql-common                         5.5.54-0+deb8u1              all          MySQL database common files, e.g. /etc/mysql/my.cnf

下面是一个示例脚本:

#!/usr/bin/perl
use DBI;
my $dbh = DBI -> connect("dbi:mysql:homo_sapiens_core_89_38:ensembldb.ensembl.org:3306", "anonymous") || die "Connection Error: $DBI::errstrn"; 
my $sth = $dbh -> prepare("SELECT * FROM exon limit 10");
my $success = $sth -> execute();
if (!$success && !defined $DBI::errstr){
print STDERR "Query not successful. No error message returned. Try to continue.n";
}
elsif (!$success && defined $DBI::errstr){
die "SQL Error: $DBI::errstrn";
}
while (my @row = $sth -> fetchrow_array){
print join("t", @row)."n";
}
$sth  -> finish();
$dbh -> disconnect();

错误消息的以下部分:

libmysqlclient.so.20: cannot open shared object file: No such file or directory

。通常意味着 MySQL 客户端库未安装在您尝试解压缩/安装到的系统上,因此您需要安装它。例如,在 Ubuntu 上:

sudo apt-get install mysql-client

相关内容

  • 没有找到相关文章

最新更新