加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 由于’make test’挂起而无法安装Image :: ExifTool

发布时间:2020-12-16 06:13:13 所属栏目:大数据 来源:网络整理
导读:我有一个Netgear ReadyNAS NV,我正在尝试用perl做一些事情. 由于来自供应商的perl安装是在没有uselargefiles-flag的情况下编译的,所以我试图编译/安装我自己的版本以与系统版本并行运行. 当我第一次尝试在机器上编译perl时,我遇到了麻烦,因为系统缺少很多常
我有一个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脚本进行交叉编译,所以我使用了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 "SIGCHLDn"; };

if($pid) {
    $status = waitpid($pid,0);
    warn "wait status: $statusn";
} else {
    warn "Child startingn";
    sleep 1;
    warn "Child terminatingn";
}

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

解决方法

我对这个评论有点迟了,对你的“make test”没有任何想法,但我想指出Image :: ExifTool是纯Perl,所以它不需要编译.安装步骤就像将分发文件复制到正确的目录一样简单.

>菲尔

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读