摘要问题
我是否只是对每个 perl 脚本使用 perlapp --dependent,然后确保在构建期间将 perl-static 复制到应用程序的 bin 目录(称为 perl)?
背景
我目前正在分发一个包含许多 perlapp 独立可执行文件的应用程序,这意味着它们每个都包含 perl 运行时的捆绑副本。
我想在我的应用程序中仅分发一份 perl 运行时副本,并让每个可执行文件引用我将分发的一个 perl 运行时。
例如,假设我有 10 个 perl 脚本组成我的应用程序。当我为两个演示脚本中的每一个执行 perlapp 时,我看到如下内容:
+ ls -l
-rw-r--r-- 1 ----- staff 55 Feb 5 21:03 t1.pl
-rw-r--r-- 1 ----- staff 62 Feb 5 21:03 t2.pl
+ perlapp --force t1.pl
PerlApp 9.5.1 build 300018
Copyright (C) 1998-2016 ActiveState Software Inc. All rights reserved.
Commercial license for ..................................
Created 't1'
+ perlapp --force t2.pl
PerlApp 9.5.1 build 300018
Copyright (C) 1998-2016 ActiveState Software Inc. All rights reserved.
Commercial license for ..................................
Created 't2'
+ ls -l
-rwxr-xr-x 1 ----- staff 2266356 Feb 5 21:07 t1
-rw-r--r-- 1 ----- staff 55 Feb 5 21:03 t1.pl
-rwxr-xr-x 1 ----- staff 2026992 Feb 5 21:07 t2
-rw-r--r-- 1 ----- staff 62 Feb 5 21:03 t2.pl
ls -l `which perl`
-rwxr-xr-x 1 root wheel 1978336 Mar 19 2015 /usr/local/ActivePerl-5.20/bin/perl-static
在上面的输出中,您可以看到这两个(我目前有 10 个)可执行文件中的每一个大约为 2Mib,一个对应于每个 perl 脚本。在每个捆绑的可执行文件中,都有一个 perl 运行时。如果我要分发所有 10 个,那么分发将超过 22MiB。
当应用程序只需要一个 perl 运行时时,强迫客户有效地下载 perl 运行时 10 次似乎是草率和浪费。显然,分发只是一个文件,但它比它需要的要大得多。虽然整个应用程序只有一个 perlapp 可执行文件,但 perl 运行时可以方便地捆绑到可执行文件中。但随着时间的推移,功能(即可执行文件)被添加,浪费和草率增加。
为了做到这一点,我很确定我必须使用 --dependent perlapp 命令行选项。当我测试该选项的使用时,我发现捆绑的可执行文件的大小大大减少。删除临时文件夹并执行依赖的可执行文件后,它看起来像捆绑了与以前相同的模块。
这是我的“如何”问题。
Q1(迄今为止最重要的)
如果我将 --dependent 选项添加到我的 perlapp 命令,那么我是否应该期望perlapp 捆绑它以前捆绑的所有模块?我认为这里的答案是“是”,但我希望像 Graham Stuart 这样的人做出回应。
第二季度
当执行这些依赖的可执行文件时,我所要做的就是确保静态链接的 perl 在 PATH 中,这是真的吗?
Q3(Q2 重新措辞以进行额外说明)
perlapp 是否捆绑了 perl 的静态链接版本?我认为确实如此,但我想再次确保我做一些等效的事情。
附言
我尝试在 ActiveState 的 pdk 论坛上发布该主题,但我不认为该界面正在接受我的帖子,因为它显示我的帖子未发布,不知道如何发布。
如果我使用 --dependent 选项,那么我会看到:
+ perlapp --force --dependent t1.pl
PerlApp 9.5.1 build 300018
Copyright (C) 1998-2016 ActiveState Software Inc. All rights reserved.
Commercial license for ..................................
Created 't1'
+ perlapp --force --dependent t2.pl
PerlApp 9.5.1 build 300018
Copyright (C) 1998-2016 ActiveState Software Inc. All rights reserved.
Commercial license for ..................................
Created 't2'
+ ls -l
-rwxr-xr-x 1 ----- staff 108560 Feb 5 21:07 t1
-rw-r--r-- 1 ----- staff 55 Feb 5 21:03 t1.pl
-rwxr-xr-x 1 ----- staff 108608 Feb 5 21:07 t2
-rw-r--r-- 1 ----- staff 62 Feb 5 21:03 t2.pl
在上面的输出中,您可以看到文件非常小,以至于它们不可能捆绑 perl 运行时。如果我分发 perl-static 和 10 个上述可执行文件,那么分发量约为 3MiB,节省了约 19MiB。
当我取消设置 PATH 时,可执行文件会引发错误,因为找不到 perl 可执行文件。这就是为什么我认为发行版只需要将 perl 运行时与可执行文件放在 bin 目录中。似乎是一个合理的解决方案,但由于我没有写 perlapp,我无法真正了解真相。我不得不依靠别人来告诉我“是的,你即将做正确的事情,当你做 x 时,你不会在 6 个月后被咬”。