由于来自供应商的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脚本进行交叉编译,所以我使用了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/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