2011-05-17 80 views
3

我想獲得WWW :: Mechanize使用https登錄到雅虎;但是,它需要使用Crypt :: SSLeay通過https發送。爲什麼Perl模塊Crypt :: SSLeay在加載時會出錯?

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.


地穴:: 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] 

注意:由於LWP :: UserAgent的需要,最近安裝了使用App :: perlbrew的Perl v5.10.1。我使用我的Perl新版本安裝了Crypt :: SSLeay。

我沒有root priveldiges,因爲我在學校的遠程服務器上這樣做。請告訴我爲什麼即使它成功安裝,它也會出錯。我知道它與共享庫有關,但安裝程序會識別它們。

邊注意:如果我不說「使用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應該照顧這一點。

+0

不,你需要安裝[LWP :: Protocol :: https](https://metacpan.org/pod/LWP::Protocol::https)。現在,[Crypt :: SSLeay](https://metacpan.org/pod/Crypt::SSLeay)將'LWP :: Protocol :: https'指定爲依賴項,所以我不知道爲什麼它沒有安裝。另外,[你可能不需要'Crypt :: SSLeay'](https://www.nu42.com/2014/08/dont-declare-dependency-on-cryptssleay.html)。 – 2016-08-09 03:10:01

回答

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中使用它,請在另一個目錄中安裝另一個副本。

+0

謝謝,顯然它使用舊版本的Perl來執行腳本。然而,它仍然不讓我通過https連接,並說「不支持協議方案'https'(LWP :: Protocol :: https未安裝)」。任何預感爲什麼?我認爲Crypt :: SSLeay負責它。 – Johnny 2011-05-17 23:42:04

+0

@Johnny,如果您使用的是LWP版本6,那麼LWP :: Protocol :: https必須單獨安裝。 – cjm 2011-05-18 04:01:58