检测编译的 perl 脚本是否动态加载模块
Detect whether compiled perl script dynamically loads modules
我 运行宁 Windows 10 与草莓 Perl。我使用 PAR::Packer 模块制作我的一些 Perl 脚本的可执行版本。
我发现一些模块,例如XML::LibXML,需要安装 Perl 才能 运行 可执行文件。因为我是为没有 Perl 的用户编译这些,所以这违背了编译的目的。
有什么方法可以在编译前判断可执行文件是否需要将 Perl 安装到 运行?
假设您想知道,如果您的 pp 打包的可执行文件将 运行 在没有安装 perl 的系统上,我是这样做的:
从 sysinternals.com 获取 Process Explorer。
打包您的可执行文件。
运行 可执行文件并在 ProcessExplorer
中检查进程的 dll
(view->'show lower pane' and view->'lower pane view'->'DLLs')
如果您看到任何 dll 引用的路径不是 PAR 临时目录或系统库,它们存在于任何 windows 系统上,请返回,再次打包并使用 pp 的 -l 开关添加这些库。
示例:
pp -e "use XML::LibXML; while(1){sleep 1}"
运行宁a.exe ...
Process Explorer 显示
libxml2-2_.dll ... C:\Users\user\perl522\c\bin\libxml2-2_.dll
这不会出现在用户系统上...
Re运行宁页:
pp -l libxml2-2_.dll -e "use XML::LibXML; while(1){sleep 1}"
这次运行宁a.exe ...
Process Explorer 显示:
libxml2-2_.dll ... C:\Users\user\AppData\Local\Temp\par-xxx\cache-SHA1\libxml2-2_.dll
现在进程选择与 pp 捆绑在一起的库并提取到 PARs 缓存目录。
干杯,克里斯
我 运行宁 Windows 10 与草莓 Perl。我使用 PAR::Packer 模块制作我的一些 Perl 脚本的可执行版本。
我发现一些模块,例如XML::LibXML,需要安装 Perl 才能 运行 可执行文件。因为我是为没有 Perl 的用户编译这些,所以这违背了编译的目的。
有什么方法可以在编译前判断可执行文件是否需要将 Perl 安装到 运行?
假设您想知道,如果您的 pp 打包的可执行文件将 运行 在没有安装 perl 的系统上,我是这样做的:
从 sysinternals.com 获取 Process Explorer。
打包您的可执行文件。
运行 可执行文件并在 ProcessExplorer
中检查进程的 dll
(view->'show lower pane' and view->'lower pane view'->'DLLs')
如果您看到任何 dll 引用的路径不是 PAR 临时目录或系统库,它们存在于任何 windows 系统上,请返回,再次打包并使用 pp 的 -l 开关添加这些库。
示例:
pp -e "use XML::LibXML; while(1){sleep 1}"
运行宁a.exe ...
Process Explorer 显示
libxml2-2_.dll ... C:\Users\user\perl522\c\bin\libxml2-2_.dll
这不会出现在用户系统上...
Re运行宁页:
pp -l libxml2-2_.dll -e "use XML::LibXML; while(1){sleep 1}"
这次运行宁a.exe ...
Process Explorer 显示:
libxml2-2_.dll ... C:\Users\user\AppData\Local\Temp\par-xxx\cache-SHA1\libxml2-2_.dll
现在进程选择与 pp 捆绑在一起的库并提取到 PARs 缓存目录。
干杯,克里斯