gpt4 book ai didi

perl - 如何分发具有许多 perlapp 可执行文件的应用程序,但只分发一个 perl

转载 作者:行者123 更新时间:2023-12-02 05:06:22 24 4
gpt4 key购买 nike

问题总结

我是否只需对每个 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 运行时时,强制客户有效下载 10 次 Perl 运行时似乎是草率且浪费的。显然,该发行版只有一个文件,但它比需要的要大得多。虽然整个应用程序只是一个 perlapp 可执行文件,但 perl 运行时可以方便地捆绑到可执行文件中。但随着时间的推移,功能(即可执行文件)被添加,浪费和草率也会增加。

为了正确执行此操作,我非常确定必须使用 --dependent perlapp 命令行选项。当我测试该选项的使用时,我发现捆绑的可执行文件的大小大大减小。删除临时文件夹并执行依赖的可执行文件后,看起来它已经捆绑了与以前相同的模块。

这是我的“如何”问题。

Q1(迄今为止最重要的)

如果我将 --dependent 选项添加到我的 perlapp 命令中,那么我是否应该期望 perlapp 捆绑之前捆绑的所有模块?我认为答案是"is",但我希望像格雷厄姆·斯图尔特这样的人能够做出回应。

第二季度

当执行这些依赖的可执行文件时,我所要做的就是确保静态链接的 perl 位于 PATH 中,这是真的吗?

第三季度(为进一步澄清而重新措辞第二季度)

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,所以我无法真正知道真相。我必须依靠别人告诉我“是的,你要做正确的事,并且 6 个月后当你做 x 时,你不会被咬”。

最佳答案

不完全是您正在寻找的解决方案,但是 Win32::Packer支持该功能。您告诉它构成应用程序的一组脚本,它会将所有脚本打包为一个 MSI 安装程序,其中包含所有脚本的所有依赖项和 .exe 包装器。

目前仅支持Strawberry Perl ,但添加对 AS Perl 的支持应该不会太困难。

关于perl - 如何分发具有许多 perlapp 可执行文件的应用程序,但只分发一个 perl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48633121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com