perl编译: 'Too many levels of symbolic links'

标签 perl makefile compilation exec symlink

在 Linux 中,运行 ma​​ke test 命令时 perl 安装失败

t/op/exec ...................................................... # Failed test 17 - at op/exec.t line 114
# $! eq 40, 'Too many levels of symbolic links'
FAILED at test 17

错误并未指示哪个符号链接(symbolic link)失败。

遵循的步骤:

- Download perl archive from https://www.cpan.org/src/ 

- [user@hostname perl-5.28.3]$  tar -xvzf perl-5.28.3.tar.gz

- [user@hostname perl-5.28.3]$  cd perl-5.28.3

- [user@hostname perl-5.28.3]$  ./Configure -des -Dinstallprefix=<installation directory>

- [user@hostname perl-5.28.3]$  make

- [user@hostname perl-5.28.3]$  make test

Failed 2 tests out of 2464, 99.92% okay.
        ../cpan/Time-Local/t/Local.t
        op/exec.t
Elapsed: 1317 sec
u=12.87  s=34.02  cu=548.85  cs=488.76  scripts=2464  tests=1158447
make: *** [test] Error 1



[user@hostname perl-5.28.3]$  t/TEST op/exec.t
t/op/exec ... # Failed test 17 - at op/exec.t line 114
# $! eq 40, 'Too many levels of symbolic links'
FAILED at test 17
Failed 1 test out of 1, 0.00% okay.
        op/exec.t

已验证其他 perl 版本也发生相同的行为,这表明我的安装环境存在一些问题。

任何指针都会有帮助。

最佳答案

感谢您的指点@choroba。

以下是根本原因。

<perl-5.28.3>/t/op/exec.t文件中,我们在第 114 行附近发现以下内容:

$rc = system { "lskdfj" } "lskdfj";
unless( ok($rc == 255 << 8 or $rc == -1 or $rc == 256 or $rc == 512) ) {
    print "# \$rc == $rc\n";
}

unless ( ok( $! == 2  or  $! =~ /\bno\b.*\bfile/i or  
             $! == 13 or  $! =~ /permission denied/i or
             $! == 22 or  $! =~ /invalid argument/i  ) ) {
    diag sprintf "\$! eq %d, '%s'\n", $!, $!;
}

在我的环境中 PATH env 变量值为

[user@hostname perl-5.28.3]$ echo $PATH
/bin:/usr/lib64/qt-3.3/bin:/bin:/usr/bin:/usr/dev_infra/platform/bin:/usr/dev_infra/generic/bin:/usr/local/bin:/usr/local/ade/bin

在此路径中,对于以下路径,ls 尝试抛出错误“符号链接(symbolic link)级别过多”

[user@hostname perl-5.28.3]$ ls -i  /usr/local/bin /usr/local/ade/bin
ls: cannot access /usr/local/bin: Too many levels of symbolic links
ls: cannot access /usr/local/ade/bin: Too many levels of symbolic links
    
[user@hostname perl-5.28.3]$ ls -ltr /usr/local
lrwxrwxrwx. 1 root root   20 Mar 30  2017 bin -> ./packages/local/bin
lrwxrwxrwx. 1 root root   18 Mar 30  2017 ade -> /usr/local/nde/ade

从 PATH 中删除有问题的路径后,make test 成功运行

[user@hostname perl-5.28.3]$  export PATH=/bin:/usr/lib64/qt-3.3/bin:/bin:/usr/bin:/usr/dev_infra/platform/bin:/usr/dev_infra/generic/bin

[user@hostname perl-5.28.3]$  make test

All tests successful.
Elapsed: 1611 sec
u=14.47  s=44.63  cu=731.82  cs=575.84  scripts=2474  tests=1209537

关于perl编译: 'Too many levels of symbolic links' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71113863/

相关文章:

c - 解释编译代码结构和静态分配

perl - 如何将 Atom 转换为 RSS?

perl - 为什么我在 perl 的标量上下文中获取列表中的最后一个值?

makefile - MinGW/GNU 品牌 - "multiple target patterns"

linux - 是否可以使用 sudo 执行 makefile 的某些部分,而某些部分不使用 sudo?

c# - 改进整体 .NET 程序集的编译时间 - 增量编译?

perl - 在sprintf中截断(不舍入)小数位?

linux - 在命令行中运行三个程序,或者在程序运行时记录 CPU 使用率的脚本

python - 在 makefile 中设置环境变量并从 python 脚本中读取它不起作用

c - 如何释放 uint32_t 指针?