总结问题
我是否只需对每个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。
强制客户下载10次perl运行时实际上是一种懒散和浪费的做法,因为该应用程序只需要一个perl运行时。显然,发布仅为一个文件,但它比必要的更大。虽然整个应用程序只是一个perlapp可执行文件,但perl运行时可以方便地捆绑到可执行文件中。但随着时间的推移,功能(即可执行文件)增加,浪费和懒散性也会增加。
正确的方法是,我非常确定必须使用--dependent perlapp命令行选项。当我测试使用该选项时,我看到捆绑的可执行文件大小大大减小。删除临时文件夹并执行依赖的可执行文件后,它似乎已经捆绑了与之前相同的模块。
以下是我的“如何”问题。
Q1(迄今为止最重要的)
如果我在perlapp命令中添加--dependent选项,那么我应该期望perlapp捆绑所有先前捆绑的模块吗?我认为答案是“是”,但我想让像Graham Stuart这样的人回答。
Q2
是否真的只需要确保静态链接的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可执行文件。这就是为什么我认为分发只需要在bin目录中与可执行文件一起提供perl运行时。这似乎是一个合理的解决方案,但由于我没有编写perlapp,所以我无法真正知道实情。我必须依靠其他人告诉我“是的,你正在做正确的事情,并且在6个月后进行x操作时不会受到影响”。