我有一个 Netgear ReadyNAS NV + ,我正在尝试使用perl做一些事情。
由于来自供应商的perl安装是在没有 uselargefiles -flag的情况下编译的,所以我尝试编译/安装我自己的版本以与系统版本并行运行。
当我第一次尝试在机器上编译perl时,我遇到了麻烦,因为系统缺少很多常规系统工具,导致配置脚本无法正常运行。
# ./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!
为了解决这个问题,我安装并使用this cross-compiler在另一台机器上构建perl。 我无法弄清楚如何使用perl的标准configure-script进行交叉编译,因此我使用了this。
之后我可以将我的新perl文件夹复制到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:
弄清楚如何让Configure脚本在机器上本机工作。 将尝试在那里建立,看看是否会更好地工作。这需要一些时间,机器慢。
为了能够运行我需要的配置脚本:
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 - testdriving fork:
尝试以下操作来验证fork是否正常工作。我相信测试成功,但我以前从未尝试过fork,所以如果我读错了输出,请告诉我。
# 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
答案 0 :(得分:1)
我对这个评论有点迟了,对你的#34; make test&#34;没有任何想法。挂起,但我想指出Image :: ExifTool是纯Perl,所以它不需要编译。安装步骤就像将分发文件复制到正确的目录一样简单。
答案 1 :(得分:0)
找出测试失败的原因。无论如何使用该模块结束。似乎可以正常使用我的文件。