使用某些外部模块时无法进行预编译

时间:2018-12-16 09:32:05

标签: perl6 precompile rakudo

我正在尝试使用以下脚本预编译外部文件以获取其资产:

#!/usr/bin/env perl6

use v6;

use nqp;

my $precomp-store = CompUnit::PrecompilationStore::File.new(prefix => "/tmp".IO);

our $precomp = CompUnit::PrecompilationRepository::Default.new(store => $precomp-store);
my $file = "./test.pm6";
my $io = $file.IO;
my $id = nqp::sha1(~$file);

my $handle = $precomp.load($id)[0];
without $handle {
    $precomp.precompile($io, $id, :force);
    $handle = $precomp.load($id)[0] // fail("Could not precompile $file for $!");
}

我正在使用的文件是这样:

use Test;

=begin pod

This is a simple pod

=end pod

如果我打开RAKUDO_MODULE_DEBUG,它会失败并显示更多内容,但重要的部分在这里:

precomp [master●] % perl6 precomp.p6
 1 RMD: Loading settings CORE
 1 RMD: going to load Perl6::BOOTSTRAP
 1 RMD: Settings CORE loaded
 1 RMD: Loading settings CORE.d
 1 RMD: Settings CORE.d loaded
 1 RMD: Attempting 'nqp' as a pragma
 1 RMD: Successfully handled 'nqp' as a pragma
 1 RMD: Trying to load 1547B8DB721297B89EF50BE4C8A107F9B5D21542 from /tmp
 1 RMD: Trying to load 1547B8DB721297B89EF50BE4C8A107F9B5D21542.repo-id from /tmp
 1 RMD: dependency: 2D4A7CA10695CD2B374573413D261A660E282E2A perl#sources/2D4A7CA10695CD2B374573413D261A660E282E2A D211A39B814DE8D3F38300E0D20E3D0AD2CC31FC CompUnit::DependencySpecification.new(short-name => "Test", source-line-number => 1, from => "Perl6", version-matcher => Bool::True, auth-matcher => Bool::True, api-matcher => Bool::True)
 1 RMD: Could not find Test
Use of uninitialized value of type Str in string context.
Methods .^name, .perl, .gist, or .say can be used to stringify it to something meaningful.
  in block <unit> at precomp.p6 line 14
 1 RMD: Outdated precompiled /tmp/F2356FF85D653556C42648576BF9FD57907BCA26/15/1547B8DB721297B89EF50BE4C8A107F9B5D21542
            mtime: Instant:1544952082.231729
            checksum: 35C697BFF7987CFB69E25F56B3EFCB2BD79D75DA, expected: 
 1 RMD: Precompiling ./test.pm6 into /tmp/F2356FF85D653556C42648576BF9FD57907BCA26/15/1547B8DB721297B89EF50BE4C8A107F9B5D21542.bc (  )
 2     RMD: Loading settings CORE
 2     RMD: going to load Perl6::BOOTSTRAP
 2     RMD: Settings CORE loaded
 2     RMD: Loading settings CORE.d
 2     RMD: Settings CORE.d loaded
 1 RMD: Precompiled ./test.pm6 into /tmp/F2356FF85D653556C42648576BF9FD57907BCA26/15/1547B8DB721297B89EF50BE4C8A107F9B5D21542.bc
 1 RMD: Writing dependencies and byte code to /tmp/F2356FF85D653556C42648576BF9FD57907BCA26/15/1547B8DB721297B89EF50BE4C8A107F9B5D21542.tmp for source checksum: F2F1395843988DF3C47A50DA40CF3B864959FB14
 1 RMD: Trying to load 1547B8DB721297B89EF50BE4C8A107F9B5D21542 from /tmp
 1 RMD: Trying to load 1547B8DB721297B89EF50BE4C8A107F9B5D21542.repo-id from /tmp
 1 RMD: Loading precompiled
        /tmp/F2356FF85D653556C42648576BF9FD57907BCA26/15/1547B8DB721297B89EF50BE4C8A107F9B5D21542

其要点是未找到模块Test。这可能意味着PrecompilationRepository试图在同一预编译存储库的上下文中查找Test,这很有意义。所以问题是:这个假设正确吗?如果是,我们如何将该库路径注入到预编译存储中?还是我们应该只使用默认的预编译存储?我们该怎么做?

0 个答案:

没有答案