【发布时间】:2017-11-22 20:17:09
【问题描述】:
我有一个现有的 2000 LOC perl 脚本和一个 Tkx GUI,这是我作为实习生的第一天在我是唯一程序员的地方继承的(其他人都是 IC 工程师,但他们在 perl 中进行模拟)。
我们的目标是生成一个可执行文件供客户端运行,而无需安装 perl 或其他任何东西。显然这在过去是可能的。
我只能通过安装 ActiveTcl 8.5.15、ActivePerl 5.16、通过 PPM Win32::API 和 Win32::Exe、tk、tkx、Carp 安装,然后通过 cpanp i PAR 安装来构建程序::打包机。这种非常具体的组合是我发现的唯一一种产生任何有效结果的组合。
那就是:
pp -vvv -l C:\Perl\lib\auto\Tcl\tkkit.dll -l C:\Perl\lib\auto\Tcl\Tcl.dll -l C:\Perl\lib\auto\Win32\API\API.dll --gui -o .\<THE NAME OF THE FILE.EXE> .\<PERL SOURCE>.pl
从这里我得到一个工作的可执行文件,除了它不会在我测试过的任何其他机器上运行。据我所知,这不是拱门问题。
前一个开发人员的文档在这个主题上非常缺乏(他更擅长记录实际代码)。我听说他把它迁移到了 StrawberryPerl,然后当它坏了时又回到了 ActivePerl,但到目前为止它在这里仍然很坏,现有的构建环境早已不复存在。
任何帮助将不胜感激。
操作:使用 PAR::Packer pp 从 perl 脚本编译 Windows 二进制文件,以便客户端可以在没有 perl 的情况下运行它
预期结果:一个 tk GUI 窗口打开并保持打开状态。
实际结果:tk GUI 窗口没有打开,控制台和任何提示都没有产生错误。
【问题讨论】:
-
要获取更多诊断信息,请停止使用 --gui 选项并打开 metacpan.org/pod/PAR::Environment#PAR_GLOBAL_DEBUG 您也可以清空 %path% 以在同一台机器上测试生成的 exe
-
谢谢。实际上我自己找到了解决方案,就是这个块“BEGIN { if (exists $ENV{PAR_PROGNAME}) { use Config (); $ENV{PERL_TCL_DL_PATH} = catfile($ENV{PAR_TEMP}, 'tkkit.' . $ Config::Config{dlext}, ); } }" 需要出现在 "use Tkx;" 之前正确指示 PAR::Packer 获取 Tcl 的必要部分以打包程序。因此,必要的库被遗漏了,可执行文件正在搜索 %path% 中不存在的 ActiveTcl 安装。但是感谢您提供有关用于调试的附加模块的详细信息。
-
如果你的问题得到解决,你应该把你的解决方案写成答案(这比包含无格式代码的冗长评论更容易阅读)。
-
啊,我不知道我可以。在这篇文章之前我没有足够的代表点来做到这一点。谢谢。