2

我的应用程序是用 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
...
4

0 回答 0