Почему модуль Perl Crypt :: SSLeay выдает ошибку при загрузке?

Я пытаюсь получить WWW :: Mechanize для входа в Yahoo с помощью https; однако для отправки по https требуется использование 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.


Установка 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]

ПРИМЕЧАНИЕ: недавно был установлен Perl v5.10.1 с использованием App :: perlbrew, так как он нужен LWP :: UserAgent. Я установил Crypt :: SSLeay, используя новую версию Perl.

У меня нет 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 должен позаботиться об этом.


person Johnny    schedule 17.05.2011    source источник
comment
Нет, вам нужно установить https://metacpan.org/pod/LWP::Protocol::https. Теперь Crypt :: SSLeay указывает LWP::Protocol::https как зависимость, поэтому я не знаю, почему он не был установлен. Кроме того, вам, вероятно, не понадобится _2 _.   -  person Sinan Ünür    schedule 09.08.2016


Ответы (1)


Если вы изучите сообщение об ошибке, вы заметите, что в нем упоминаются как 5.10.1, так и 5.8.0 (в пути к библиотеке Perl). Это означает, что вы пытаетесь использовать модуль, созданный для одной версии Perl с другой версией. Модули Perl на основе XS (то есть те, которые включают код C) не совместимы на двоичном уровне между основными выпусками Perl.

Похоже, вы установили Crypt :: SSLeay, используя Perl 5.10.1, и пытаетесь использовать его с 5.8.0. Это не сработает. Используйте с этой установкой только Perl 5.10.x. Если вам нужно использовать его также с Perl 5.8.0, установите еще одну копию в другой каталог.

person cjm    schedule 17.05.2011
comment
Спасибо, очевидно, скрипт выполнялся с использованием старой версии Perl. Однако он по-прежнему дает не позволяет мне подключаться через https, говоря, что схема протокола https не поддерживается (LWP :: Protocol :: https не установлен). Есть догадки о том, почему? Я думал, что за это отвечает Crypt :: SSLeay. - person Johnny; 18.05.2011
comment
@Johnny, если вы используете LWP версии 6, то LWP :: Protocol :: https необходимо установить отдельно. - person cjm; 18.05.2011