【发布时间】:2016-04-08 09:53:28
【问题描述】:
我使用 pp PAR::Packer 构建了一个独立的 exe 文件以在 Windows 机器上运行。
有人能解释一下如何用这台 Windows 机器上的所有依赖包构建一个 Perl 脚本,以创建一个在 Linux 机器上运行的独立文件吗?
【问题讨论】:
标签: perl par perl-packager
我使用 pp PAR::Packer 构建了一个独立的 exe 文件以在 Windows 机器上运行。
有人能解释一下如何用这台 Windows 机器上的所有依赖包构建一个 Perl 脚本,以创建一个在 Linux 机器上运行的独立文件吗?
【问题讨论】:
标签: perl par perl-packager
从 Windows 机器 is not possible 开始生成在 Linux 机器上运行的二进制文件。
您使用pp(来自PAR-Packer)命令的方式可能与您在Windows 中使用的方式完全相同
pp -S -M Some::Module -M Some::Other::Module -o youBinary.bin Script1.pl Script2.pl ScriptN.pl
注意事项:
-M 标志可能是必要的,因为有时自动查找依赖项可能不起作用(其中一些是在运行时动态加载的,因此在获得良好组合之前需要反复试验)。当你在执行pp时看到这样的警告时要特别小心:Use of runtime loader module Module::Runtime detected. Results of static scanning may be incomplete.
Use of runtime loader module Module::Implementation detected. Results of static scanning may be incomplete.
将多个脚本打包到一个二进制文件中的可能性。您可以让他们创建指向该二进制文件的不同符号链接来执行不同的脚本。
当指定单个输入程序时,生成的可执行文件将与该程序具有相同的行为。但是,当打包多个程序时,生成的可执行文件将运行与 $0 具有相同基本名称的可执行文件(即用于调用它的文件名)。如果没有匹配项,它会因错误“无法打开 perl 脚本“$0”而死去
时不时很方便。
还要注意在具有“旧”libc 的机器上创建二进制文件。如果您在最先进的 linux 上执行此操作,则您也需要一个最先进的 linux 来运行它,从而降低了便携性。
请注意,即使您的 perl 是使用共享库构建的,上面的“独立可执行文件”也不需要单独的 perl5x.dll 或 libperl.so 才能正常运行。但即使在这种情况下,底层系统库如 libc 也必须在宿主机和目标机之间兼容。
享受您的独立 Perl 二进制文件。
编辑
从 Windows 机器 is not possible 开始生成在 Linux 机器上运行的二进制文件。
Perl Packager 脚本说它可以创建在相同操作系统中运行的可执行文件。我可以用它在 linux 机器上创建 Win32 二进制文件吗?或者我应该使用什么从我的脚本在 linux 上创建 Win32 可执行二进制文件?
无法为不同于您当前运行的平台创建独立的二进制文件。这通常是一个难题,因为您必须交叉编译所有 XS 模块和 perl 本身。不好看。
例如,如果您想在 Linux 上开发一个应用程序并为 Linux/x86 和 Win32/x86 发布它,那么最好设置一个带有 Windows(XP 或 2000 或其他)的虚拟机和一个Perl 安装。在该机器上,使用 PAR/pp 为 Win32 打包您的应用程序。
我可以在哪些平台上运行 PAR?生成的可执行文件将在哪些平台上运行?
Win32 (95/98/ME/NT4/2K/XP)、FreeBSD、Linux、AIX、Solaris、Darwin 和 Cygwin。
生成的可执行文件将在任何支持生成平台二进制格式的平台上运行。
【讨论】: