Perl: не може да зареди модул поради грешен ELF клас ELFCLASS64

Получавам следната грешка, докато се опитвам да създам код на 64-битова машина.

Can't load '/e/pkgs/linux/intel/perl/5.8.0/lib/site_perl/5.8.0/i686-linux/auto/XML/LibXML/Common/Common.so' 
for module XML::LibXML::Common: libxml2.so.2: wrong ELF class: ELFCLASS64  
at /e/pkgs/linux/intel/perl/5.8.0/lib/5.8.0/i686-linux/DynaLoader.pm line 229. 
at /e/pkgs/linux/intel/perl/5.8.0/lib/site_perl/5.8.0/i686-linux/XML/LibXML.pm line 11

Perl е 32-битов, но имам както 32, така и 64-битови версии на libxml2.so.2 на моята машина. Опитва ли се да използва 64-битовата версия на libxml2?


person imagineerThat    schedule 17.04.2014    source източник
comment
Не знам как работи на unix. Има ли път за търсене на динамично свързани библиотеки (.so)? Ако е така, безумно трябва да го промените, така че 32-битовият libxml2.so да бъде намерен преди 64-битовия.   -  person ikegami    schedule 18.04.2014


Отговори (1)


Библиотеката, която не успявате да заредите, е тази, която поддържа модула Perl XML::LibXML::Common, а не библиотеката libxml2. Повечето чисти Perl модули са доста преносими между различни версии на perl и дори различни платформи, но бинарните файлове, които понякога поддържат тези модули, не са и ще получите грешки като тази, когато се опитате да използвате библиотека, създадена за една платформа/ версия на друга платформа/версия.

Ще искате да преинсталирате XML::LibXML дистрибуцията на Perl за текущата ви система. В зависимост от това как са инсталирани грешните двоични файлове за вашата система, може да се наложи да направите това и за няколко други дистрибуции.

Но преди да направите това, може да искате да надстроите вашата версия на Perl. Perl 5.8 е древен, а Perl 5.8.0 е стар дори по стандартите на Perl 5.8.

(пускането на cpan XML::LibXML трябва да преинсталира тази дистрибуция за вас)

person mob    schedule 18.04.2014
comment
Re Библиотеката, която не успявате да заредите [...] не е библиотеката libxml2. Всъщност е така. Common.pm не се зарежда, защото Common.so не се зарежда, защото libxml2.so не се зарежда, защото libxml2.so не е правилният тип двоичен файл. - person ikegami; 18.04.2014
comment
@ikegami - правилно ли е предварителното предписание (преинсталирайте XML::LibXML)? - person mob; 18.04.2014
comment
Не знам. Не знам как системата определя кой .so да зареди. - person ikegami; 18.04.2014