-1

私は5.16.1のperlでProc::ProcessTableを構築しています

makeの出力:

Skip blib/lib/Proc/ProcessTable.pm (unchanged)
Skip blib/lib/Proc/Killall.pm (unchanged)
Skip blib/lib/Proc/example.pl (unchanged)
Skip blib/lib/Proc/Killfam.pm (unchanged)
gmake[1]: Entering directory `/jxu/tmp/Proc-ProcessTable-0.45/Process'
Skip ../blib/lib/Proc/ProcessTable/Process.pm (unchanged)
Manifying ../blib/man3/Proc::ProcessTable::Process.3
gmake[1]: Leaving directory `/jxu/tmp/Proc-ProcessTable-0.45/Process'
gcc -c    -D_REENTRANT -fno-strict-aliasing -pipe  -DPERL_USE_SAFE_PUTENV -O    -DVERSION=\"0.45\"  -DXS_VERSION=\"0.45\" -fPIC "-I/opt/VRTSperl/lib/5.16.1/i86pc-solaris-thread-multi/CORE"  -DPROC_FS ProcessTable.c
gcc -c    -D_REENTRANT -fno-strict-aliasing -pipe  -DPERL_USE_SAFE_PUTENV -O    -DVERSION=\"0.45\"  -DXS_VERSION=\"0.45\" -fPIC "-I/opt/VRTSperl/lib/5.16.1/i86pc-solaris-thread-multi/CORE"  -DPROC_FS OS.c
Running Mkbootstrap for Proc::ProcessTable ()
chmod 644 ProcessTable.bs
rm -f blib/arch/auto/Proc/ProcessTable/ProcessTable.so
gcc  -G -L/usr/local/lib OS.o  ProcessTable.o  -o blib/arch/auto/Proc/ProcessTable/ProcessTable.so      \
        \

chmod 755 blib/arch/auto/Proc/ProcessTable/ProcessTable.so
cp ProcessTable.bs blib/arch/auto/Proc/ProcessTable/ProcessTable.bs
chmod 644 blib/arch/auto/Proc/ProcessTable/ProcessTable.bs
Manifying blib/man3/Proc::Killall.3
Manifying blib/man3/Proc::ProcessTable.3
Manifying blib/man3/Proc::Killfam.3

大丈夫そうです。

make testの出力:

gmake[1]: Entering directory `/jxu/tmp/Proc-ProcessTable-0.45/Process'
gmake[1]: Leaving directory `/jxu/tmp/Proc-ProcessTable-0.45/Process'
PERL_DL_NONLAZY=1 /opt/VRTSperl/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/process.t .. Not a CODE reference at /opt/VRTSperl/lib/5.16.1/i86pc-solaris-thread-multi/DynaLoader.pm line 213.
END failed--call queue aborted at /jxu/tmp/Proc-ProcessTable-0.45/blib/lib/Proc/ProcessTable.pm line 213.
Compilation failed in require at t/process.t line 9.
BEGIN failed--compilation aborted at t/process.t line 9.
t/process.t .. Dubious, test returned 2 (wstat 512, 0x200)
Failed 3/3 subtests 

Test Summary Report
-------------------
t/process.t (Wstat: 512 Tests: 0 Failed: 0)
  Non-zero exit status: 2
  Parse errors: Bad plan.  You planned 3 tests but ran 0.
Files=1, Tests=0,  0 wallclock secs ( 0.03 usr  0.01 sys +  0.04 cusr  0.00 csys =  0.08 CPU)
Result: FAIL
Failed 1/1 test programs. 0/0 subtests failed.
*** Error code 2
make: Fatal error: Command failed for target `test_dynamic'

ありがとうございました !

4

1 に答える 1

0

これは完全な答えではありません。

エラーは、DynaLoader.pm の 213 行目で報告された「コード参照ではありません」です。

  boot:
    my $xs = dl_install_xsub("${module}::bootstrap", $boot_symbol_ref, $file);

    # See comment block above

    push(@dl_shared_objects, $file); # record files loaded

    &$xs(@args);   # <- line 213

これは、によって返されたものはすべてdl_install_xsubcoderef ではないことを意味します。より具体的にはundef、 、数値、または文字列にすることはできません。これらは異なるエラー メッセージになるためです。したがって$xs、その時点で他のタイプの参照が含まれています。

dl_install_xsub(DynaLoader の一部) は、newXS_flags(perl の一部) の薄いラッパーです。(perl 型: 「コード値」へnewXS_flagsのポインタ) を返します。CV *そして、この時点で私は困惑しています。

さらに調査するために考えられる手段: perl デバッガーを使用して、DynaLoader.pm の 213 行目にブレークポイントを置き、実際に何が入っているかを確認して$xsから、逆方向に作業します。

于 2013-01-15T09:06:06.013 に答える