为什么Perl模块Crypt :: SSLeay在加载时会出错?

时间:2011-05-17 22:11:53

标签: perl module openssl perl-module

我试图让WWW :: Mechanize使用https登录Yahoo;但是,它需要使用Crypt :: SSLeay通过https发送。

Crypt :: SSLeay已成功安装,并且已在系统上安装了openssl。

但是,它在加载时出错:


Can't load '/home/gen19/perl5/lib/perl5/lib/site_perl/5.10.1/i686-linux//auto/Crypt/SSLeay/SSLeay.so' for module Crypt::SSLeay: /home/gen19/perl5/lib/perl5/lib/site_perl/5.10.1/i686-linux//auto/Crypt/SSLeay/SSLeay.so: undefined symbol: PL_sv_undef at /usr/lib/perl5/5.8.0/i386-linux-thread-multi/DynaLoader.pm line 229. at /home/gen19/lwp4 line 15 Compilation failed in require at /home/gen19/lwp4 line 15. BEGIN failed--compilation aborted at /home/gen19/lwp4 line 15.


Crypt :: SSLeay的安装成功,可以识别openssl的安装(这里):

perl Makefile.PL
=======================================================
Only one OpenSSL installation found at /usr
Consider running 'perl Makefile.PL --default' the next
time Crypt::SSLeay is upgraded to select this directory
automatically thereby avoiding the following prompt.
=======================================================
Which SSL install path do you want to use? [/usr] /home/gen19/ssldir

BUILD INFORMATION
================================================
ssl library: OpenSSL 0.9.8 in /home/gen19/ssldir
ssl header:  openssl/ssl.h
libraries:   -L/home/gen19/ssldir/lib -lssl -lcrypto -lgcc
include dir: -I/home/gen19/ssldir/include/openssl -I/usr/kerberos/include
================================================
Note (probably harmless): No library found for -lgcc
Writing Makefile for Crypt::SSLeay
The test suite can attempt to connect to public servers
to ensure that the code is working properly. If you are
behind a strict firewall or have no network connectivity,
these tests may fail (through no fault of the code).

Do you want to run the live tests (y/N) ? [N]

注意:最近使用App :: perlbrew安装了Perl v5.10.1,因为LWP :: UserAgent需要它。我使用我的新版Perl安装了Crypt :: SSLeay。

我没有root priveldiges,因为我在学校的远程服务器上这样做。请告诉我为什么即使安装成功也会出错。我知道它与共享库有关,但安装认识到它们。

SIDE注意:如果我不说“使用Crypt :: SSLeay”,我的脚本工作正常。在开始时,但是当我使用https时它给出了错误,它不是支持的协议,并且需要安装LWP :: protocol :: https。安装总是失败。

编辑:感谢您的帮助,CJM。显然,当我执行时它使用的是旧版本的Perl,但现在我已经解决了这个问题。

它不再给出错误;但是,它仍然说

Error GETing https://login.yahoo.com/config/login_verify2?&.src=ym: Protocol scheme     'https' is not supported (LWP::Protocol::https not installed) at lwp4 line 14

我认为Crypt :: SSLeay应该照顾这个。

1 个答案:

答案 0 :(得分:4)

如果检查错误消息,您会注意到它提到了5.10.1和5.8.0(在Perl库路径中)。这表明您正在尝试使用为不同版本的Perl版本构建的模块。基于XS的Perl模块(即包含C代码的模块)在Perl的主要版本之间不是二进制兼容的。

您似乎使用Perl 5.10.1安装了Crypt :: SSLeay,并尝试将其与5.8.0一起使用。那不行。仅使用Perl 5.10.x进行安装。如果您还需要将它与Perl 5.8.0一起使用,请在另一个目录中安装另一个副本。