APR.c:可加载库和 Perl 二进制文件不匹配(获得握手密钥 0xeb00080,需要 0xce00080)

问题描述 投票:0回答:1

对于 Debian、Linux 和基于 sudo 的虚拟机来说是全新的。我最初想运行这个CGI文件(

printfile.cgi
):

#!/usr/bin/perl

use strict;
use CGI;

print "Content-type: text/html\n\n";

my $document_root = "/opt/lampp/htdocs/";

my $cgi = new CGI;

my $filename = $cgi->param('file');
my $filepath = $document_root.$filename;

open(FILE, $filepath);
my @file_in = <FILE>;
foreach(@file_in) {
    print $_, "<br>\n";
}

close(FILE);

exit;

但是,我收到以下错误消息:

Can't locate CGI.pm in @INC

这是第一个问题,我无法查明原因,但我假设

CGI.pm
位于基于
/usr
的目录或
/opt
目录中。不管怎样,我知道我安装的
libcgi-pm-perl
位于错误的目录中(
INC
正在期待它)

在寻找了一些解决方法12之后,我最初尝试使用上述链接中的use lib方法,但它只能找到一个

.pm
文件。

接下来,我尝试将分散的

/usr
/opt
文件夹中的文件复制到
@INC
中的文件夹中(我使用了
/etc/perl
)。

CGI文件需要的主要

.pm
文件是CGI、Request、Pool和APR。就 APR 而言,我确实在 CGI 文件中使用了
'use lib'
方法。修改成我现在用的这个版本:

#!/usr/bin/perl

use lib '/opt/lampp/lib/perl5/site_perl/5.34.1/x86_64-linux-thread-multi/'; # To look for APR.pm
use strict;
use APR;
use Request; (Request, Pool and CGI are in /etc/perl)
use Pool;
use CGI;

print "Content-type: text/html\n\n";

my $document_root = "/opt/lampp/htdocs/";

my $cgi = new CGI;

my $filename = $cgi->param('file');
my $filepath = $document_root.$filename;

open(FILE, $filepath);
my @file_in = <FILE>;
foreach(@file_in) {
    print $_, "<br>\n";
}

close(FILE);

exit;

但是,在移动/复制

.pm
文件之间,我设法意外地将
APR.pm
复制到
/etc/perl
目录中,并将其重新复制回原始库/文件夹(我忘记了,抱歉)

不确定对 APR 文件的修改是否有任何作用,我在运行时收到了新的错误消息

printfile.cgi
:

APR.c: loadable library and perl binaries are mismatched (got handshake key 0xeb00080, needed 0xce00080)

我提到了这两个问题关于如何解决不匹配的问题,但对如何继续感到困惑:

如果我没记错的话,我必须重新安装

APR.pm
文件,也就是整个
libapache2-mod-perl2
包来纠正不匹配的情况。

我希望找到我的问题的答案,如果我听起来缺乏经验,我深表歉意。

linux perl debian sudo xs
1个回答
0
投票

您正在处理的库是“纯 Perl”模块(

.pm
文件)和
.xs
文件的组合。 XS 是“Perl 的语言扩展,可以包装 C 库使其成为 Perl 库”(SO 定义)。 “不匹配”错误意味着您用来运行脚本的进程使用的 Perl 版本与用于构建和安装包括 XS 在内的模块的版本不同。

这种情况在系统升级后经常发生,所有基于XS的模块都应该重新构建并重新安装。

此外,该系统上可能有许多 Perl 版本。一种可能是系统附带的 Perl,另一种可能是根据应用程序需要安装的 Perl。尝试调查像

/root/perl5/bin
/opt/lampp/bin
这样的地方是否没有第二个 Perl?

© www.soinside.com 2019 - 2024. All rights reserved.