检测编译的Perl脚本是否动态加载模块

时间:2018-11-15 17:15:23

标签: perl compilation par

我正在使用Strawberry Perl运行Windows 10。我使用 PAR :: Packer 模块制作一些Perl脚本的可执行版本。

我发现一些模块,例如 XML :: LibXML ,需要安装Perl才能运行可执行文件。由于我是在没有Perl的情况下为用户编译这些文件,因此这违反了编译的目的。

在编译之前,有什么方法可以告诉我该可执行文件是否需要运行Perl?

1 个答案:

答案 0 :(得分:2)

假设您想知道,如果您的pp打包可执行文件将在未安装perl的系统上运行,请按以下步骤操作:

从sysinternals.com获取Process Explorer。
打包可执行文件。
运行可执行文件并在ProcessExplorer中检查进程的dll
(视图->“显示下部窗格”和视图->“下部窗格视图”->“ DLL”)
如果您看到任何dll都指向Windows系统中存在的PAR temp-dir或系统库以外的其他路径,请返回,再次打包并使用pp的-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 cache-dir。

干杯,克里斯