Не удается загрузить C:/strawberry/perl/site/lib/auto/XML/LibXML/LibXML.dll для модуля XML::LibXML

Я скачал клубнику PERL и пишу одно приложение с CGI Perl Apache на Winxp sp3). Одна из библиотек (написанных кем-то другим), которую я использую, использует XML:: LibXML. Когда я загружаю страницу, она выдает внутреннюю ошибку сервера. Из журнала ошибок Apache я вижу эту ошибку:
Невозможно загрузить C: /strawberry/perl/site/lib/auto/XML/LibXML/LibXML.dll для модуля XML::LibXML: load_file: указанный модуль не найден в C:/strawberry/perl/lib/DynaLoader.pm строка 190.
C: /strawberry/perl/site/lib/auto/XML/LibXML/LibXML.dll существует со всеми разрешениями. Также эта библиотека правильно работает в Linux. Мое приложение также работает нормально, если я удаляю весь код, который нуждается в LibXML.
Может ли кто-нибудь сказать мне, когда может быть возможна проблема здесь.

4 ответа

Если вы загляните в источник для DynaLoader, вы найдете

Многие проблемы с динамической загрузкой расширений могут появиться в этом разделе кода: XYZ завершился ошибкой в ​​строке 123 файла DynaLoader.pm. Часто эти ошибки действительно происходят в коде инициализации C файла расширения XS. Perl сообщает об ошибке как об этом в коде perl просто потому, что это был последний код perl, который он выполнил.

Вы также должны были получить (но, возможно, не заметили) следующее диалоговое окно, которое предоставляет более точное сообщение об ошибке:

отсутствует libxml2.dll

Проблема не в том, что Perl не может найти LibXML.dll; Дело в том, что LibXML.dll не может найти настоящий libxml. (Первый - это просто оболочка, которая обеспечивает связывание Perl для второго.) Чтобы исправить это, вам нужно убедиться, что Strawberry Perl c\bin папка находится в вашем пути. В вашем случае это было бы C:\strawberry\c\bin,

Возможно, вам придется проверить параметры переменной среды в окнах, убедитесь, что путь установки модуля присутствует в переменной PATH. Причина, по которой это работает в linux, заключается в том, что make-файлы обычно устанавливают переменные среды для вас в linux в окнах, которые он, возможно, установил неправильно. Например, перейдите в Панель управления \ Система и безопасность \ Параметры изменения системы, затем перейдите на вкладку "Дополнительно" в разделе пользовательских переменных и посмотрите, есть ли переменная perl5lib. если нет, создайте новую переменную perl5lib и добавьте путь к вашей библиотеке (обычно C:\Perl\site\lib, но в вашем случае может отличаться)

У меня была такая же проблема после установки Strawberry Perl. Он работал нормально, когда я запускал скрипт с сервера, но не удаленно из средства автоматизации. Проблема заключалась в том, что переменные окружения не обновлялись при удаленном запуске. Поэтому я сделал перезагрузку сервера, что решило проблему.

Недавно я столкнулся с той же проблемой, в моем случае это не было связано с переменной PATH (это уже было правильно). Дело в том, что я выполнял свой скрипт из консоли Git Bash, и, как оказалось, вместо Strawberry использовался (см. git-bash perlGit-bash perl не должен быть первым в пути). Помогло переключение на стандартный терминал Windows CMD.

Другие вопросы по тегам