我有一个现有的2000 LOC perl脚本和一个Tkx GUI,我刚刚在第一天作为实习生继承我是唯一的程序员(其他人都是IC工程师,但是他们在perl中进行模拟) )。
目标是为客户端生成可执行文件,而无需安装perl或其他任何东西。显然这在过去是可能的。
我只能通过安装ActiveTcl 8.5.15,ActivePerl 5.16,通过PPM Win32 :: API和Win32 :: Exe,tk,tkx,Carp安装来构建程序,然后通过cpanp安装我的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窗口无法打开,控制台或任何提示中都不会产生错误。
答案 0 :(得分:1)
感谢所有回复的人。
我实际上自己找到了解决方案,就是这个块
BEGIN { if (exists $ENV{PAR_PROGNAME}) { use Config (); $ENV{PERL_TCL_DL_PATH} = catfile($ENV{PAR_TEMP}, 'tkkit.' . $Config::Config{dlext}, ); } }
需要出现在“使用Tkx”之前;正确地指示PAR :: Packer抓取Tcl的必要部分来打包程序。因此,遗漏了必要的库,可执行文件正在%path%中搜索不存在的ActiveTcl安装。但是,感谢您提供有关调试的附加模块的详细信息。
答案 1 :(得分:0)
这是我在Windows 7上使用草莓perl 5.26.1 和 tkx 1.09 的解决方案:
pp --compile --noscan --dependent --compress 6 hello.pl
现在我生成的文件结构:
$ tree -L 2
.
├── bin
│ ├── hello.exe
│ ├── hello.pl
│ ├── libgcc_s_dw2-1.dll
│ ├── libstdc++-6.dll
│ ├── libwinpthread-1.dll
│ ├── perl526.dll
│ ├── tcl86.dll
│ ├── tk86.dll
│ └── zlib1.dll
└── lib
├── tcl8.6
└── tk8.6
BTW,整个文件夹可以通过我的机器上的7-zip压缩到大约 2.7MB 。