Определить, динамически ли скомпилированный Perl-скрипт загружает модули - PullRequest
0 голосов
/ 15 ноября 2018

Я использую Windows 10 с Strawberry Perl. Я использую модуль PAR :: Packer для создания исполняемых версий некоторых моих сценариев Perl.

Я считаю, что некоторые модули, например, XML :: LibXML , требуется установка Perl для запуска исполняемого файла. Поскольку я собираю их для пользователей без Perl, это отрицательно сказывается на цели компиляции.

Можно ли как-нибудь определить перед компиляцией, нужен ли исполняемый файл для установки Perl для запуска?

1 Ответ

0 голосов
/ 17 ноября 2018

Если вы хотите знать, будет ли ваш pp-упакованный исполняемый файл работать в системе без установленного perl, вот как я это делаю:

Загрузите Process Explorer с сайта sysinternals.com.
Упакуйте свой исполняемый файл.
Запустите исполняемый файл и проверьте dll процесса в ProcessExplorer
(просмотр -> «Показать нижнюю панель» и просмотр -> «Просмотр нижней панели» -> «DLLs»)
Если вы видите какую-либо dll, ссылающуюся на путь, отличный от PAR-temp-dir или системных библиотек, которые присутствуют в любой системе Windows, вернитесь, упакуйте снова и добавьте эти библиотеки, используя ключ pl -l.

Пример:

pp -e "use XML::LibXML; while(1){sleep 1}"

работает a.exe ... Диспетчер процессов отображает:

libxml2-2_.dll ... C:\Users\user\perl522\c\bin\libxml2-2_.dll

это не будет присутствовать в системе пользователя ...
перезапуск pp:

pp -l libxml2-2_.dll -e "use XML::LibXML; while(1){sleep 1}"

работает a.exe ... Диспетчер процессов отображает:

libxml2-2_.dll ... C:\Users\user\AppData\Local\Temp\par-xxx\cache-SHA1\libxml2-2_.dll

Теперь процесс выбирает библиотеку, которая была связана с pp и извлекается в кеш-каталог PARs.

Ура, Крис

...