4

私はPerlを使用していくつかのことをしようとしているNetgearReadyNASNV+を持っています。

ベンダーからのperlインストールはuselargefiles -flagなしでコンパイルされるので、システムバージョンと並行して実行するために自分のバージョンをコンパイル/インストールしようとしました。

私が最初にマシン自体でperlをコンパイルしようとしたとき、システムに通常のシステムツールがたくさんなく、Configure-scriptが正しく実行されないため、問題が発生しました。

# ./Configure -des -Dprefix=$HOME/perl-5.16.2
First let's make sure your kit is complete.  Checking...
./Configure: line 1986: split: command not found
cat: /root/dload/perl-5.16.2/UU/x??: No such file or directory
Locating common programs...
I don't know where 'comm' is, and my life depends on it.
Go find a public domain implementation or fix your PATH setting!

これを回避するために、このクロスコンパイラをインストールして使用し、別のマシンでperlをビルドしました。perlの標準のconfigure-scriptを使用してクロスコンパイルする方法がわからなかったので、これを使用しました。

その後、新しいperl-folderをNASにコピーして、次のような作業を行うことができます。

# ~/sparc-perl-5.16.2/bin/perl -version

This is perl 5, version 16, subversion 2 (v5.16.2) built for sparc-linux

Copyright 1987-2012, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

# ~/sparc-perl-5.16.2/bin/perl -e 'print "A string!\n";'
A string!

したがって、ある意味で、「私の」perlをマシン上で動作させるという私の探求に成功したと感じています。

ただし、追加のモジュールをインストールしようとすると問題が発生します。

cpanp(特に)を使用してImage :: ExifToolをインストールしようとしましたが、インストールが完了しません。

今日、私は手動でインストールを試みることに頼りました。

wget http://search.cpan.org/CPAN/authors/id/E/EX/EXIFTOOL/Image-ExifTool-9.12.tar.gz
tar xzf Image-ExifTool-9.12.tar.gz
cd Image-ExifTool-9.12
~/sparc-perl-5.16.2/bin/perl Makefile.pl
make

すべてが想定どおりに機能します。

私がテストをするようになると、しかしそれは次のように無期限にハングします:

# make test
PERL_DL_NONLAZY=1 /root/sparc-perl-5.16.2/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t t/AFCP.t ...........

実行中のプロセスを見ると、これらはコマンドを表すプロセスだと思います。

# ps aux | grep per[l]
root     26187  0.5  0.7 12000 7808 pts/0    S+   10:31   0:07 /root/sparc-perl-5.16.2/bin/perl -MExtUtils::Command::MM -e test_harness(0, 'blib/lib', 'blib/arch') t/AFCP.t t/AIFF.t t/APE.t t/ASF.t t/BigTIFF.t t/BMP.t t/CanonRaw.t t/Canon.t t/CanonVRD.t t/Casio.t t/DICOM.t t/DjVu.t t/DNG.t t/DV.t t/EXE.t t/ExifTool.t t/FLAC.t t/FlashPix.t t/Flash.t t/Font.t t/FotoStation.t t/FujiFilm.t t/Geotag.t t/GeoTiff.t t/GE.t t/GIF.t t/GIMP.t t/GPS.t t/HTML.t t/InDesign.t t/IPTC.t t/ITC.t t/Jpeg2000.t t/JVC.t t/Kodak.t t/KyoceraRaw.t t/Lang.t t/LNK.t t/M2TS.t t/Matroska.t t/MIE.t t/MIFF.t t/Minolta.t t/MP3.t t/MWG.t t/MXF.t t/Nikon.t t/Olympus.t t/OpenEXR.t t/Panasonic.t t/PDF.t t/Pentax.t t/PGF.t t/PhotoCD.t t/PhotoMechanic.t t/Photoshop.t t/PICT.t t/PNG.t t/PostScript.t t/PPM.t t/PSP.t t/QuickTime.t t/Radiance.t t/Real.t t/Ricoh.t t/RIFF.t t/RTF.t t/Sanyo.t t/Sigma.t t/Sony.t t/Unknown.t t/Vorbis.t t/Writer.t t/XMP.t t/ZIP.t
root     26189  1.7  0.0     0    0 pts/0    Z+   10:31   0:24 [perl] <defunct>

これは、cpanpを使用して同じインストールを試みたときに起こることと完全に一致しています。

make installを実行するだけで、テストを実行/完了できないことはそれほど問題にならないことを願っていますが、少し不安を感じます。私はむしろ何が悪いのかを理解したいと思います。

また、テストがそのようにハングするのは奇妙だと思います。テストが失敗することは受け入れられますが、非生産的な方法で実行し続けるのは奇妙に感じます。

私がソースからperlを構築するのは初めてであり、クロスコンパイラーを初めて使用するので、私が非常に間違ったことをしたことを知っても驚くことはありません。

私は何が間違っているのですか?

編集-mahcineでコンパイル:

構成スクリプトをマシン上でネイティブに機能させる方法を理解しました。それがうまくいくかどうかを確認するためにそこに構築しようとします。少し時間がかかりますが、マシンは遅いです。

必要な構成スクリプトを実行できるようにするには、次のようにします。

GCC

apt-get install libc6-dev gcc gdb libtag1-dev uuid-dev

coreutils

apt-get install coreutils

-Dcc = gcc

./Configure -des -Dprefix=$HOME/perl-5.16.2 -Dcc=gcc

EDIT2-コンパイルに失敗しました:

これまでで最も短命な成功:

# make
`sh  cflags "optimize='-O2'" perlmini.o`  -DPERL_IS_MINIPERL -DPERL_EXTERNAL_GLOB perlmini.c
  CCCMD =  gcc -DPERL_CORE -c -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64  -O2 -Wall 
In file included from perl.c:33:
perl.h:699: error: conflicting types for `syscall'
/usr/include/unistd.h:939: error: previous declaration of `syscall'
ake: *** [perlmini.o] Error 1

EDIT3-テストドライブフォーク:

フォークが正常に機能することを確認するために、次のことを試みました。テストは成功したと思いますが、これまでフォークを試したことがないので、出力を間違えた場合はお知らせください。

# cat test_forkwait.px 
#!/root/sparc-perl-5.16.2/bin/perl

$pid = fork();
die if $pid < 0;

$SIG{CHLD} = sub { warn "SIGCHLD\n"; };

if($pid) {
    $status = waitpid($pid, 0);
    warn "wait status: $status\n";
} else {
    warn "Child starting\n";
    sleep 1;
    warn "Child terminating\n";
}

# ./test_forkwait.px 
Child starting
Child terminating
SIGCHLD
wait status: 29913
4

2 に答える 2

1

私はこのコメントに少し遅れており、あなたの「make test」ハングについてのアイデアはありませんが、Image::ExifTool は純粋な Perl であるため、コンパイルは必要ありません。インストール手順は、配布ファイルを適切なディレクトリにコピーするだけです。

  • フィル
于 2014-04-11T13:58:46.637 に答える
0

テストが失敗する理由を理解することをあきらめました。とにかくモジュールを使用することになりました。私のファイルでは問題なく動作するようです。

于 2013-01-21T11:25:33.813 に答える