我的应用程序是用 wxPerl 制作的,我用PAR::Packer
. 它在我的机器(macOS 和 Windows)上运行良好,但在没有安装 Perl/wxPerl 的机器上运行良好;事实上,如果我在运行可执行文件之前将保存 Perl 安装的目录的名称更改为perl5X
或,它在我的机器上也不起作用。StrawberryX
在 macOS 上,我可以从终端收到错误消息:
Can't load '/var/folders/[...]/ca54e36a.bundle' for module Wx:
dlopen(/var/folders/[...]/ca54e36a.bundle,
1): Library not loaded: /[...]/Alien/wxWidgets/osx_cocoa_3_0_2_uni/lib/libwx_osx_cocoau_core-3.0.0.2.0.dylib
Referenced from: /var/folders/[...]/libwx_osx_cocoau_adv-3.0.dylib
Reason: image not found at <embedded>/DynaLoader.pm line 197.
at <embedded>/PAR/Heavy.pm line 140.
我已经尝试了--link
所有的.dylib
/.dll
文件(也发生了关于其他文件的错误),但是发生了同样的错误。
我use Wx::Perl::Packager
在我的源文件中有解释here,并运行pp
(或者,在Windows上,wxpar
;在不工作的macOS上),如:
pp -x -c -o MyApp.exe script/app.pl -a assets/collections
当可执行文件运行时,包含的数据文件-a
会被解压缩到正确的位置,所以它可以工作那么远。但随后它停止了。
那么,我错过了什么?
--编辑 1
为清晰起见进行了编辑。
--编辑 2
我包括一个最小(非)工作示例:
use warnings;
use strict;
package MyFrame;
use Wx::Perl::Packager;
use Wx;
use base 'Wx::Frame';
sub new {
my $class = shift;
my $self
= $class->SUPER::new( undef, -1, 'Test', [ -1, -1 ], [ 250, 150 ], );
return $self;
}
1;
package MyApp;
use base 'Wx::App';
sub OnInit {
my ($self) = @_;
my $frame = MyFrame->new();
$frame->Show();
}
1;
package main;
MyApp->new->MainLoop;
然后我pp
像这样运行:
#!/bin/bash
pp -x -c -o minimal.app \
-l /Users/Patrik/perl5/perlbrew/perls/perl-5.30.0/lib/site_perl/5.30.0/darwin-2level/Alien/wxWidgets/osx_cocoa_3_0_2_uni/lib/libwx_osx_cocoau_core-3.0.0.2.0.dylib \
minimal.pl
但是在“隐藏” Perl 安装并运行我得到的应用程序之后
...
Library not loaded: /Users/Patrik/perl5/perlbrew/perls/perl-5.30.0/lib/site_perl/5.30.0/darwin-2level/Alien/wxWidgets/osx_cocoa_3_0_2_uni/lib/libwx_osx_cocoau_core-3.0.0.2.0.dylib
...